Shell腳本

第一個Shell腳本

test.sh內容

#! /bin/bash  
#告訴系統用什麼解釋器執行
#井號爲註釋
echo "what's your name?"  
#echo命令打印輸出
read name   
#read命令讀取鍵盤輸入
echo "hello $name"

運行shell兩種方法:

  1. 作爲可執行程序
    chmod +x ./test.sh 加可執行權限
    ./test.sh 作爲二進制程序運行要加./告訴系統在當前目錄下查找
  2. 作爲解釋器運行的參數
    /bin/bash test.sh

Shell變量

定義變量

var1="value"變量名和等號之件不能有空格

使用變量

echo ${var1}變量名前加美元符號,花括號用於限定邊界,防止二義性

重新定義變量

var1="null"

只讀變量

readonly var1使用readonly命令把變量var1設置爲只讀;
這時無法給變量重新賦值

刪除變量

unset var2使用uset命令刪除變量,注意,unset不能刪除只讀變量

變量類型

1)局部
2)環境
3)shell變量


Shell中特殊變量

變量 含義
$ 當前shell進程ID
0 腳本文件名
n 傳遞給基本的第n個參數
# 傳遞給腳本的參數個數
* 傳遞給腳本的所有參數,被雙引號包含時”“,與@有所不同,*會將所有參數當做一個整體
@ 傳遞給腳本的所有參數,被雙引號包含時”“,與*有所不同,@會將參數分割開來
? 上個命令的退出狀態,或者函數的返回值 成功0 失敗1

例子
test.sh內容如下

#! /bin/bash
echo "current file name:$0"
echo "first parameter:$1"
echo "second parameter:$2"
echo "all parameters:$@"
echo "all parameters:$*"
echo "total numbers of parmeters:#"

執行./test.sh bxb lsy後結果

current file name:./test.sh
first parameter:bxb
second parameter:lsy
all parameters:bxb lsy
all parameters:bxb lsy
total numbers of parmeters:#

Shell替換

轉義字符

轉義字符 含義
\\ 反斜槓
\a 警報,響鈴
\b 退格,刪除鍵
\f 換頁(FF),將當前位置移動到下頁開頭
\n 換行
\r 回車
\t tab,水平製表符
\v 垂直製表符

使用時echo -e "換行前\n換行後"加參數-e使用轉義,加上-E禁用轉義

命令替換

命令替換指Shell可以先執行命令,將命令結果保存在變量中,再在合適的地方輸出
使用方法 反引號將要執行的命令擴起來

DATE=`date`
#這裏date是shell命令,獲取當前時間,用反引號括起來,執行結果保存在變量DATE中
echo $DATE

變量替換

變量替換可以根據變量的狀態(是否爲空 是否定義)來改變它的值

可以使用變量替換的形式

形式 說明
var 使用變量本身的值
var:-word 如果變量var爲空或已被刪除(unset),那麼返還word,不改變
var:=word 如果變量var爲空或被unset,返回word,並將var設爲word
var:?message 如果var爲空或被unset,那麼將消息message送到標準錯誤輸出,可以用來檢測變量是否被正常賦值;若此替換出現在Shell腳本中,腳本將停止運行
var:+word 如果變量已被定義,返回word,但不改變變量的值
Tips: 變量替換都在var爲空或unset情況下執行,如果var已被設置,將直接輸出變量

例子
test.sh內容如下

#!/bin/bash

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

執行./test.sh後結果

Variable is not set
1 - Value of var is 
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is 
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章