在shellscript中,條件的測試判斷可以通過test
或[
命令實現。如判斷檔案是否存在的語句可寫為if test -f test.sh
或if [ -f test.sh ]
。使用[
命令時符號與條件之間需要留出空格。下面列出字串比較、算術比較、檔案條件測試的一些用法。
字串比較
結果string1 = string2
兩個字串相同時為真
string1 != string2
兩個字串不相同時為真
-n string
字串不為空時為真
-z string
字串為null(空串)時為真
算術比較
結果expression1 -eq expression2
兩個表示式相等時為真
expression1 -ne expression2
兩個表示式不相等時為真
expression1 -gt expression2
expression1大於expression2時為真
expression1 -ge expression2
expression1大於等於expression2時為真
expression1 -lt expression2
expression1小於expression2時為真
expression1 -le expression2
expression1小於等於expression2時為真
! expression
表示式為假時結果為真
檔案條件測試
結果-d file
檔案是乙個目錄時為真
-e file
檔案存在為真,通常使用-f
-f file
檔案存在為真
-g file
檔案的set-group-id為被設定則為真
-r file
檔案可讀為真
-s file
檔案大小不為0為真
-u file
檔案的set-user-id為被設定則為真
-w file
檔案可讀為真
-x file
檔案可執行為真
在使用中可以需要滿足多個條件,比如在if語句中如果需要同時滿足三個條件就需要巢狀著寫三個if,這樣做會大大減低**的美觀性並增加巢狀的深度。所以在這樣的條件下可以使用&&連線多個條件,如statements1 && statements2 && statements3
。在程式執行的過程中,將會以從左往右的順序執行,當其中某條語句為假時將不再判斷後續的語句,整句的結果也為假。只有在所以語句都為真的情況下,整句的結果才為真。
或的用法與與相似,它的用法為statements1 || statements2 || statements3
。不同的於與需要當前條件為真才繼續判斷後續條件,或在使用中當某乙個語句為真便不再繼續判斷後續的語句,整句的結果也為真。反之,只有所有的語句都為假時才為假。在使用中,與和或可以同時使用,如statements1 || statements2 && statements3
,它表示statements1或statements2為真且statesments3為真的情況下為真。需要注意的是使用命令的情況下,&&與||需要放在之外。
控制語句包括條件語句、迴圈語句、轉向語句等,shellscript中的控制語句與其它語言大致相同,如case
、until
語句對應於c語言中的switch
、do...while
語句。
在shellscript中,if語句的語法如下所示。
if condition1
then
statements1
elif condition2
statements2
else
statements3
fi
condition即為執行的條件,其表示式可為上一節中的某種條件語句,當表示式為真時將執行對應的語句。statements指滿足條件的情況下將執行的語句,它不限制語句的數量,可以為一條或多條,也可以沒有(在這種情況下需要使用:命令)。在shellscript中,elif對應著c語言中的else if語句,其作用為當condition1不滿足時將繼續判斷condition2,若其為真將執行statements2。else語句的作用為當上述條件都不滿足時將執行該區域內的語句。最後,fi語句代表了該語句塊結束。在使用中乙個if語句塊中,與之對應(即不計入巢狀的語句)的elif語句可以不使用或多次使用,else語句只能使用一次或不使用,而if與fi有僅可以出現一次。
在shellscript中,case語句對應著c語言中的switch語句,語法稍有不同但沒有太大的影響。
case variable in
pattern1 [ | pattern3 ... ] ) statements1 ;;
pattern2 [ | pattern4 ... ] ) statements2 ;;
esac
case語句將會進行模式匹配然後執行相關的語句。當variable的值為pattern1時,便會執行statements1語句塊;當variable的值為pattern2時,便會執行statements2語句塊。中的內容為可選條件,即可以多種情況執行同樣的語句。在c語言的switch語句中有default,而case語句中沒有default關鍵字。若要default功能可以使用萬用字元*,即*),它的含義為任意字元窗。每個語句塊都要以;;結尾。
for語句可以迴圈處理一組值values,這組值可以是任意字串的合集。for語句在使用上更類似於foreach迴圈。for迴圈的用法如下。
for variable in values
do statements
done
下面使用乙個例子以便更好的理解for語句。
#!/bin/sh
for foo in bar fud 43
doecho
$foo
done
exit
0
程式的執行結果為:
bar
fud43
while迴圈的用法與c語言中的while迴圈類似,當條件滿足時便執行迴圈中的語句,直到條件不滿足為止。
while condition
do statements
done
until迴圈相當於c語言中的do…while迴圈。與while迴圈不同,until迴圈會向執行迴圈內的語句,再判斷條件是否成立。當條件滿足,迴圈將會繼續進行,否則將會跳出迴圈。
until condition
do statements
done
break與continue語句是在迴圈語句中使用的,其作用為當執行break時將不再執行迴圈中後續的**且跳出迴圈,當執行continue時將不再執行此次迴圈中後續的**進入下一次迴圈。與其他語言不同的是,在continue後可以帶有乙個數字,代表跳出的巢狀迴圈層數,但是使用這個將會提高程式的理解難度。 shell script 條件語句 迴圈語句
條件語句 1 bin bash 23 read p input your name name 4 第一種判斷 5if name mike then 注意這裡用 比較兩個字串時,變數 name加引號,並且 兩邊有空格 後面有空格 前面有空格 6echo eq 7else 8echo not eq 9 ...
shell Script 條件判斷語句
條件判斷語句 if 條件判斷 then 命令 fiif 條件判斷 then 條件成立執行,命令 fi整數比較 eq equal 相等 ne no不等於 gt 大於 ge 大於或等於 lt 小於 le 小於或等於兩個比大小案例 if 1 gt 2 then echo 1 2 fiif 1 le 2 t...
控制語句 for
1.迴圈結構 在程式當中,將把需要反覆執行的 片段放到 迴圈體 再聯合計數器,共同控制這段需要反覆執行的 基本上所有的程式語言支援迴圈包括三種 1 for 2 while 3 do while 2 for 語法結構 for 初始表示式 布林表示式 更新表示式 3 for執行原理 1 初始化表示式 布...