shell編程式控制制結構:expr、let、for、while、until、shift、if、case、break、continue、函數、select,exprcontinue
1、expr計算整數變數值
s=`expr 2 + 3`
運算子號和參數之間要有空格分開;
2、let命令
let s=(2+3)*4
echo $s
3、for語句
for 變數 in 列表
do
命令列(通常用到迴圈變數)
done
#!/bin/bashfor var in one two three four five do echo ------ echo '$var is' $var done
以命令傳回值作為列表#!/bin/bashfor var in `ls` do echo ----- echo $var done
4、while語句
文法格式:
while 運算式
do
命令列
done
#!/bin/bashnum=1while [ $num -le 10 ]doecho -e "\t the num is $num"let num=num+1done
5、until語句
文法格式:
unitil 運算式
do
命令列
done
#!/bin/bashsum=0num=10until test $num -eq 0 do sum=`expr $sum + $num` num=`expr $num - 1` doneecho "sum = $sum"
6、shift語句
shift語句:將變數的值依次向左傳遞,並形成一組新的參數值–
例:位置變數當前值為:1=file1 2= file2 3=file3–
執行一次shift後為:1=file2 2=file3
還可以在shift命令中指定位置變數轉移的次數–
shift n
#!/bin/bashwhile [ -n "$*" ] do echo $1 $2 $3 $4 $5 $6 shift done
7、if語句
if 語句的一般形式 :
if 條件運算式
then #當條件為真時執行以下語句
命令列表
else #當條件為假時執行以下語句
命令列表
fi
#!/bin/bashif test -f "$1" then echo "$1 is an ordinary file"else echo "$1 is not an ordinary file"fi
8、case語句
取值後面必須為單詞in,每一個模式必須以右括弧結束。取值可以為變數或常數。取值檢測匹配的每一個模式,一旦模式比對,其間所有命令開始執行直至;;。執行完匹配模式相應命令後不再繼續其他模式。如果無一匹配模式,使用*號捕獲該值,再接受其他輸入。
[注]1.
模式字串中可以使用萬用字元2.
如果一個模式字串中包含多個模式,那麼各模式之間應以豎線(|)隔開,表各模式是“或”的關係,即只要給定字串與其中一個模式相配,就會執行其後的命令列表。3.
各模式字串應是唯一的,不應重複出現,並且要合理安排它們的出現順序,例如,不應將“*”作為頭一個模式字串,因為“*”可以與任何字串匹配,若第一個出現,就不會再檢查其他模式了。4.
case語句以關鍵字case開頭,以關鍵字esac結束。5.
case的退出(返回)值是整個結構中最後執行的命令的退出值。若沒有執行任何命令,則退出值為0.
#!/bin/bashcase $1 in1) echo " you choice is 1";;2) echo " your choice is 2";;*) echo " your choice is others";;esac
9、break與continue
–
1、break:用於立即終止當前迴圈的執行,break命令可以使使用者從迴圈體中退出來。–
文法:break[n] ,其中,n表示要跳出幾層迴圈,預設值為1–
2、continue:跳過迴圈體中在其之後的語句,會返回到本迴圈層的開頭,進行下一次迴圈。–
文法:continue[n],其中,n表示從包含continue語句的最內層迴圈體向外跳到第幾層迴圈,預設值為1,迴圈層數是由內向外編號。
10、函數
函數:由函數標題和函數體兩部分組成。標題是函數名。函數體是函數內在的命令集合。標題名稱必須唯一。變數均為全域變數,沒有局部變數。
#!/bin/bashnum=1hello(){ echo "hello boy~ It's our $num meeting" let num=num+1}
11、select語句
格式:
select 變數 in 列表
do
命令列(通常用到迴圈變數)
done
製作一個選擇表,在列表中選擇一個選項執行命令列。如果選擇的變數不在列表序列中,則返回一個空值。需要用break退出迴圈。
#!/bin/bashecho "a is 5 ,b is 3. Please select your method: "a=5b=3select var in "a+b" "a-b" "a*b" "a/b"do breakdonecase $var in"a+b") echo 'a+b= '`expr $a + $b`;;"a-b") echo 'a-b= '`expr $a - $b`;;"a*b") echo 'a*b= '`expr $a \* $b`;;"a/b") echo 'a/b= '`expr $a / $b`;;*) echo "input error"esac