寫過shell指令碼的肯定寫過這樣一段:
if [ -d dir ]
then
echo"success"
else
echo"failed"
fi
凡是說到if的時候書裡都會提到這麼兩條規則:
1、“[”的右邊和“]”的左邊必須有空格;
2、如果要把then和if放到同一行,就要加個分號,寫成 if [-d /bin]; then 這樣的形式。
大多數的書都介紹到這裡就為止了,我也一度死記硬了這兩條規則,我還一直認為shell指令碼沒規律、記不住、太難寫。其實不然,直到今天我才發現:
roovent@ubuntu-desktop:~ $ which [
/usr/bin/[
原來“[”是個命令,和ls、rm一樣是一個命令。經查,“[”命令和test命令的功能、用法都基本一樣,在有的版本的linux中“[”就是test的一個連結。
這就好解釋了,[ -d 其實就是一個命令帶一個參數,就像ls –a,命令和參數之間當然必須有空格。只不過“[”有一點特殊,它的最後一個參數必須是“]”,參數之間也必須有空格,這就很好解釋第一條規則。then和if放到同一行,就要在“]”後加個分號來告訴“[”命令到此結束,不然就會把then當成最後一個參數了。
好了,原來一切都是這麼合情合理,shell指令碼的設計者不會沒事找事搞那麼複雜,只是“[”這麼奇怪的命令名不太能接受罷了。
最後再多說一句,if後面可以跟各種語句,比如if echo “hello”也是合法的,判斷的依據就是這條語句是否執行成功,當然了if後面跟著用&&或||串連的多條語句也是可以的。
-----------------------------------------------------
- 原創文章,轉載請註明出處。
- 博 客 園:http://www.cnblogs.com/roovent/
- 百度空間:http://hi.baidu.com/roovent/home
- 電子郵箱:yangq.nj#gmail.com
-----------------------------------------------------