邏輯控制
- 條件if
- 分支case、select
- 循環(huán)for、while、 until
- break和continue
- 有生之年也許你只需要用到if、for、while
If結構
if [ condition] ; then ..;fi
if [ condition ] ; then ..;else ..;fi
if [ condition ] ; then ..;elif ...;fi
- 簡單的邏輯可以使用
&& | |去替代
[ -f file ] && echo file exist | | echo file not exist
- 條件可以用命令返回值代替
條件判斷的類型
- 算術判斷
- 字符串判斷
- 邏輯判斷
- shell內置判斷
算術判斷
-
[ 2 -eq 2 ] 相等
-
[ 2 -ne 2 ] 不等
-
[ 3 -gt 1 ] 大于
-
[ 3 -ge 3 ] 大于等于
-
[ 3 -lt 4 ] 小于
-
[ 3 -le 3 ]小于等于
-
(())也可以表示算術比較。((10>= 8)) ,((10==10)),
字符串比較
-
[ string1 = string2 ] 如果兩字符串相同,則結果為真
-
[ string1 != string2 ] 如果兩字符串不相同,則結果為真
-
[ -n "$var" ] 如果字符串不是空,則結果為真
-
[ -z "$var" ] 如果字符串是空,則結果為真
-
[[ "xxxx" == x* ] 在表達式中表示0或者多個字符
-
[[ xx == x?? ]] 在表達式中表示單個字符
- 在引用變量的時候要記得加雙引號
[ -z "$a" ]否則當a未定義時會語法報錯
邏輯判斷
-
[ 2 -ge 1 -a 3 -ge 4 ];echo$? 與
-
[ 2 -ge 1 -0 3 -ge 4 ];echo$? 或
-
[[ 2 -ge 1 && 3 -ge 4 ]];echo$? 與
-
[[ 2 -ge 1 || 3 -ge 4 ]];echo$? 或
-
[ !2 -ge 1 ];echo$? 非
內置判斷
-
-e file 如果文件存在,則結果為真
-
-d file 如果文件是一個子目錄,則結果為真
-
-f file 如果文件是一個普通文件,則結果為真
-
-r file 如果文件可讀,則結果為真
-
-s file 如果文件的長度不為0,則結果為真
-
-w file 如果文件可寫,則結果為真
-
-x file 如果文件可執(zhí)行,則結果為真
-
[[]]是[]的擴展語法,在老的sh里并不支持。推薦用[]
Case結構
- 用于條件太多的情況。每一個條件最后使用兩個分號結尾,不可缺少。
case $var in
p1)...;;
p2)...;;
...
pn)...;;
*)...;;
esac
Select
Select var in var_list;do ....done;
- 菜單選擇,一般與case結構一起用
For循環(huán)
for(( c1 ;c2;c3 ));
do
done
for((i=0;i<10;i++));do echo $i;done
For遍歷循環(huán)
- 用于遞歸數(shù)組,還可以遞歸以空格隔開的字符串序列?;蛘呤悄硞€命令的返回值。
for f in $array[*]; do
...
done
ss="aa bb cc dd";for x in $ss;do echo $x;done
for x in `ls` ;do echo $x;done
ss=(aa bb cc "sss dd");for x in "${s[@]}";do echo $x;done
While循環(huán)
i=0;
while ((i<3));do
echo $i; ((i=i+1);
done
- 一行行的讀取文件內容
while read line; do echo $line ; done < /tmp/tmp
until
i=0;
until ((i>3));do
echo $i; .
((i+=1));
done
退出控制
- return 函數(shù)返回
- exit 腳本進程退出
- break 退出當前循環(huán)
- continue 跳過當前的循環(huán),進入下一次循環(huán)