shell程序設(shè)計(jì)流程控制
3.1 test 測試命令
3.2 expr 測試語句
3.3 If 條件判斷
3.4 for 循環(huán)
3.5 while 和 until 循環(huán)
3.6 case 條件選擇
3.7 break 和 continue
3.1 test 語句-文件測試
? 文件測試
測試文件狀態(tài):
用法:test condition 或者 [ condition ]
-------------------------------文件狀態(tài)列表----------------------------------------------
-d 目錄 ? ? ? ? ? ? ? ? ? ? ?-s 文件長度大于 0,非空
-f 正規(guī)文件 ? ? ? ? ? ? ? ?-w 文件可寫
-L 符號文件 ? ? ? ? ? ? ? ? -r 文件可讀
-x 文件可執(zhí)行
------------------------------------------------------------------------------------------------
例: $ ls -l hello
$ [ -w hello ]
$ echo $?
3.1 test 語句-文件測試
? 文件測試
使用邏輯操作符:
測試文件狀態(tài)是否 ok初狰,可以借助邏輯操作符對多個(gè)文件狀態(tài)進(jìn)行比較
-a 邏輯與,操作符兩邊均為真,結(jié)果為真,否則為假
-o 邏輯或彻犁,操作符兩邊一邊為真械姻,結(jié)果為真,否則為假
倦挂! 邏輯否,條件為假白修,結(jié)果為真
例 1: $ [ -r myfile1 -a -w myfile2 ]
$ echo $?
例 2: $ [ -w myfile1 -o -x myfile2 ]
$ echo $?
3.1 test 語句-字符串測試
? 字符串測試
字符串測試是錯(cuò)誤捕獲很重要的一部分妒峦,特別是用戶輸入或比較變量時(shí)尤為重要
格式:
test “string”
test string_operator “string”
test “string” string_operator “string”
[ string_operator string ]
[ string string_operator string ]
注:string_operator 的取值:
= 等于
!= 不等于 -z 空串 -n 非空串
例:測試環(huán)境變量 EDITOR 是否為空
3.1 test 語句-字符串測試
$ [ -z $EDITOR ]
$ echo $? 為空返回 0,否則返回 1
如果非空兵睛,取值是否為 vi
$ [ $EDITOR = “vi” ]
$ echo $?
測試變量 string1 是否等于 string2
$ string1=”hello”
$ string2=”Hello”
$ [ “$string1” = “$string2” ]
$ echo $?
note:在進(jìn)行字符串比較時(shí)肯骇,建議加引號
3.2 Exercise :- expr 測試語句
1、使用 echo 命令輸出一句話: 300/5*6= 360
注意:結(jié)果部分 360 需要使用 expr 命令運(yùn)算出來祖很,而不是直接給出結(jié)果
echo "300/5*6=`expr 300 / 5 \* 6`"
3.3 if 條件語句
格式: if 條件 1
then 命令 1
elif 條件 2
then 命令 2
else 命令 3 //注:藍(lán)色部分為可選部分
fi
注意:使用 if 語句時(shí)笛丙,必須將 then 部分放在新行,否則會產(chǎn)生錯(cuò)誤假颇,如果要
不分行胚鸯,必須使用命令分割符,即:
if 條件 1; then
命令 1
fi
一笨鸡、數(shù)值比較
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
倒引號(數(shù)字1鍵旁邊的那個(gè)鍵)
引號內(nèi)的字符串當(dāng)做shell命令行解釋執(zhí)行姜钳,得到的結(jié)果取代整個(gè)倒引號括起來的部分坦冠。
echo ‘my home is $HOME’
echo “my home is $HOME”
echo `my home is $HOME`
二、特定的 shell 變量列表:
$# 傳遞到腳本的參數(shù)個(gè)數(shù)
$* 以一個(gè)單字符串的形式顯示所有向腳本傳遞的參數(shù)哥桥,與位置變量不
同辙浑,此項(xiàng)參數(shù)可超過 9 個(gè)
$$ 腳本運(yùn)行的當(dāng)前進(jìn)程 id 號
$! 后臺運(yùn)行的最后一個(gè)進(jìn)程的進(jìn)程 id 號
$@ 與$*相同,但是使用時(shí)加引號拟糕,并在引號中返回每個(gè)參數(shù)
$? 顯示最后命令的退出狀態(tài)判呕,0 表示正確,其他任何值表示錯(cuò)誤