基本語法
shell的if語法和c語言等高階語言非常相似,唯一需要注意的地方就是shell的if語句對空格方面的要求比較嚴格(其實shell對所有語法的空格使用都比較嚴格),如果在需要空格的地方沒有打上空格,都會報錯。如if [ $1x == "ip"x ];then echo "abc";fi中少乙個空格都會報錯。另外shell的if語句必須以fi作為結尾,不然同樣會報錯。
有else和elif時也一樣,需要注意空格的問題,下面這個例子可以作為參考
if [ $1x == "ab"x ]; then
echo
"you had enter ab
"elif [ $1x == "
cd"x ]; then
echo
"you had enter cd
"else
echo
"you had enter unexpected word
"fi
對比
介紹完if語句的基本語法後,if還有乙個值得我們注意的地方,那就是"對比"。在c語言等高階語言中,不管是對比字串、還是對比整型、浮點數等等資料型別,都是使用==、<=等等對比運算子就可以完成。但是在shell中對比字串和對比數字,卻是要分開兩種方式。
對比字串只能使用==、<、>、!=、-z、-n。對比字串時,末尾一定要加上x(或者a、b等)乙個字元,因為if [ $1x == "ab"x ]時如果沒有了x ,並且$1是"",這個語句會翻譯成if [ == "ab" ],左邊相當於沒有東西了,會報語法錯誤。或者使用[[ ]],就不需要x了。使用《或者》時,如果是用[ ],需要用轉義符"\",如\>。
對比數字使用既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=。其中-eq的意思是equal,-ne是unequal,-gt是greater than,-ge是greater than or equal to,-lt是less than,-le是less than or equal to。
使用正規表示式
if在對比時可以使用正規表示式,如if [[ $1 == a*a ]](或者if [ $1x == a*ax ])。如果使用""把a*a包圍起來,*就會變成字元*,而不是正規表示式中的*。
[和[[的區別
區別一。在[中使用邏輯運算子,需要使用-a(and)或者-o(or)。在[[中使用邏輯運算子,需要使用&&或者||。
區別二。[是shell命令,在它包圍的表示式是它的命令列引數,所以串比較符》和《需要轉義,否則就變成io重定向了。[[是shell關鍵字,不會做命令列擴充套件,所以《和》不需要進行轉義。但是語法相對嚴格,如在[中可以用引號括起操作付,[[則不行。如if [ "-z" "ab" ]。
區別三。[[可以做算術擴充套件,[則不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]則會報錯。
檔案判斷
在高階語言中,判斷檔案是否存在等各種狀態都是需要呼叫特定的函式進行判斷。而在shell中,這方面就比較方便些,只需要運算子即可。
常用的檔案判斷運算子如下:
-e 檔案是否存在
-f 檔案是否是普通檔案(不是目錄、裝置檔案、鏈結檔案)
-s 表示檔案大小不為0
-d 表示檔案是否是目錄
-b 表示是塊裝置(光碟機、軟盤等)
-c 表示是字元裝置(鍵盤、音效卡等)
-p 表示是管道
-h 表示是符號鏈結
-s 表示是否是socket
-r、-w、-x表示檔案是否有可讀、可寫、可執行許可權(指執行這個測試命令的使用者)
f1 -nt f2 f1是否比f2新(new than)
f1 -ot f2 f1是否比f2舊(old than)
f1 -ef f2 f1和f2是否是相同檔案的硬鏈結
使用!時表示上述結果取反,由於內容較多,這裡不一一枚舉了。下面乙個例子可以作為程式設計參考
myfile="aa.txt
"if [ ! -f $myfile ]; then
echo $myfile"
is not exist
"touch
$myfile
else
echo $myfile"
is exist"fi
if [ ! -s $myfile ]; then
echo
"hello, my master
" >$myfile
else
echo $myfile"
is not null
"fi
shell指令碼 空格
eg gender femal right gender femal wrong gender femal wrong eg if gender femal then right.echo you are femal fiif gender.wrong if gender.wrong.eg if g...
shell指令碼對空格的嚴格規定
shell指令碼對空格有嚴格的規定,賦值語句等號兩邊不能有空格,而字串比較,等號兩邊必須有空格 賦值時 i 1 i i 1 用作賦值時,兩邊絕對不能有空格 比較時 if a b 用作比較判斷時,兩邊必須有空格 if if if commands then commands elif commands...
shell 指令碼中 中空格的說明
shell指令碼對空格有嚴格的規定,賦值語句等號兩邊不能有空格,而字串比較,等號兩邊必須有空格 賦值時 i 1 i i 1 用作賦值時,兩邊絕對不能有空格比較時 if a b 用作比較判斷時,兩邊必須有空格除此以外的注意點就是 a b 後面要有空格,前面要有個 if if if commands t...