if條件語句語法:
if [ 條件表達式 ]
then
代碼
else
代碼
fi
注意:在上面的if條件語句中,if和 [ 之間要有空格,而條件表達式和兩邊的 [ ] 都要有空格,條件表達式不能緊挨著 [ 和 ]。
if條件表達式以fi結束。
Eg.
結果出現了以下問題:
原因是因為開頭在#!後還要有一個/,加上/後解釋器錯誤沒有了,代碼如下:
可是仍然有沒有那個文件或目錄的錯誤。對於這個錯誤我覺得是echo後的表達式有問題,於是注銷了表達式,改輸出small和bigger,結果程序運行正確,輸出了small或者bigger。
所以對於echo後的表達式,我把表達式加上雙引號,結果運行成功,沒有問題了。
利用case表達式進行條件判斷:
case 變量 in
str1)
命令串;;
str2)
命令串;;
*)
Eg.
剛才之所以出錯,是因為代碼沒有正確結尾,case條件語句在shell中應該以esca結尾。
又出現錯誤如下:
原因:
*後面的)為中文符號,將它改為英文符號,並且case條件語句的結束應該為esca而不是easc,修正後如下:
就正確了,正確結果如下:
在shell腳本中使用for循環
shell中可以使用三種循環:
A、for循環
第一種語法形式:
for var in list
do
命令串
done
注意上面的list的形式可以使用空格分隔的$1 $2 $3,或者空格分隔的值1 2 3。
第二種語法形式:
for var
do
命令串
done
在這種形式中,list被省略了,那麼這時list就是指命令行參數,每次循環的var都是一個命令行參數。
eg.輸出命令行參數的和
注意上面shell程序中echo命令的參數 -e是為了讓\c 和\b生效,其中\c是表示輸出加數後不換行,\b是退格的意思刪除多余的+號。
運行腳本後出現錯誤:
原因:
expr不能喝test指令的-gt婚後在一起用,要不然將expr改為test,要不然將-gt改為>=
,值得注意的是>=前面要使用\。
仍然出錯為:
原因為:
sum求和時,等號兩端不能有空格。
改為:
運行後結果為:
B、while循環
語法格式:
while 條件表達式
do
命令行串;
done
eg.輸出命令行每個參數
shift命令將命令行參數左移,是原來處於第二位的參數變成第一位然後輸出。
結果為:
注意while循環的條件表達式也要用空格將條件表達式與 [ 和 ]分隔開來。
如果要在while中使用另一個變量n,要用 -n 的形式來表示在循環體中使用的一元表達式:
當然如果while中不添加-n也有一樣的結果:
C、until循環
語法格式如下:
until 條件表達式
do
命令串;
done