Next: for loop
Up: 流程控制與測試條件
Previous: 測試條件
  Contents
if test;then cmd1; elif test; cmd2; else cmd3 fi
if test
then
cmd1
...
elif test
cmd2
...
else
cmd3
...
fi
同樣注意寫成一行時的分號位置。尤其在寫Makefile時會用到。
另外他的else if是elif,
跟C的else if不一樣喔。
另外有種簡單的if用法
[ "$VERBOSE" ] && echo 'everything' && 表示傳回true時執行&&後面動作
[ "$VERBOSE" ] || echo 'nothing' || 表示傳回false時執行||後面動作
這邊有點要注意
[ "$var" ]
如果是空字串傳回false 這其實很像
[ -n "$var" ]
通常括號裡面是這些判斷的方式,但其實每次他如果看到有命令代換的式子,
會去執行一次命令,
但是記住他不是C,可以在if while裡面執行式子(expression)還回return值,
他所還回來的是命令的standard out,所以不可以嘗試著同時執行命令,
然後要判斷執行成功與否,來決定下一步怎麼作。
不過有的命令成功了會在standard out 印出一堆字串,我們可以利用這樣的行為來
作判斷,例如
[ "$(find . -name gyoza.txt)" ] && echo "I Find It !!!"
用$(cmd) 等於用`cmd`,如果找到了,會印出這個檔案來所以雙引號裡面" "有值,
中括號
就還回true囉。如果沒有雙引號,
如果只有一個字串則會當成字串永遠為true,所以
$ [ 1 ]
$ echo $?
0
$ [ 0 ]
$ echo $?
0
如果有兩個以上,則shell把find丟出來的字串又當成命令,想去執行他,就發生
錯誤了。
Cyril Huang
2002-06-14