1. 程式人生 > >指令碼(shell script)

指令碼(shell script)

執行方式區別

  • 三種執行方式:source.sh
  • 小數點和sh是在開啟一個子程序上執行,腳本里的變數和操作不會傳到父程序
  • source直接在父程序中執行
    例如配置生效用source ~/.bashrc而不用sh ~/.bashrc

分支

判斷符號[]

  • 中括號內的每個元件都需要空格鍵分隔,常用於if..then..fi中
  • 中括號內變數,最好都以雙引號括起來
  • 中括號內常量,最好都以單引號或雙引號括起來
  • 判斷中,一個等號和兩個等號是一樣的
name="VB Ta"
[ $name == "VB" ] #會返回引數過多錯誤,此時比較的是 VB Ta=="VB"
[ "$name" == "VB" ] #比較的是 "VB Ta"=="VB"

if…then

if [ 條件判斷式1 ]; then
    balala
elif [ 條件判斷式2 ]; then #等同於 else if
    balala
else
    balala
fi  #if倒過來寫,表示if結束
  • &&表示and,||表示or

case…esac

case $變數名 in
    "第一個變數內容")
        程式段
        ;;  #每個型別結尾用兩個連續分號處理
    "第二個變數內容")
        程式段
        ;;
    *)  #等同於default
程式段 ;; esac

函式

function do()
{
    程式段
}
  • function定義一定要在指令碼的最前面(先定義才能用)
  • function也有內建變數,0,1…,與script中的$num含義一樣,但是作用域不同

    function do()
    {
        echo "Your choice is $1"    #輸出結果是 Your choice is 1
    }
    
    case $1 in  #這個$1是執行指令碼時輸入的第一個引數
      "one")
        do 1    #這個1是給do函式的引數
        ;;
      *)
        do
    0 ;; esac

迴圈

不定迴圈

while do done

當條件成立時進行迴圈

while [ condition ] 
do      #迴圈開始
    程式段
done    #迴圈結束

until do done

當條件成立時終止迴圈

until [ condition ]
do
    程式段
done

for do done

與Java中的for迴圈含義一樣,可用i++縮寫

for (( 初始值; 限制值; 執行步長))
do
    程式段
done

for do done(固定迴圈)

已知要迴圈的次數

for var in con1 con2 con3 ...
do
    程式段
done

第一次迴圈時,varcon1var內容為con2;…