test condition 或者 [ condition ]為了與autoconf不要混淆,programmer比較喜歡用test 不用中括號condition的方法。括號的用法請注意空格。 例如
檔案測試條件 test -f /etc/file 檔案是個一般檔案不是其他特殊檔案嗎 [ -e file ] 檔案存在嗎 [ -d /etc/ ] 目錄存在嗎 [ -s file ] 檔案大小大於0嗎 [ -r file ] 檔案可讀嗎 字串測試條件 [ "$string" ] string有東西就返回true [ -n "$string" ] string有東西(non-zero)返回true [ -z "$string" ] string沒東西(zero)返回true [ "$s1" = "$s2" ] s1 等於 s2時返回true [ "$s1" != "$s2" ] s1 不等於 s2時返回true 數值條件 小心有多個-喔 [ $num1 -eq $num2 ] num1相等 num2 為true [ $num1 -ne $num2 ] 不等 num2 為true [ $num1 -lt $num2 ] 小於 num2 為true [ $num1 -ge $num2 ] 大於等於num2 為true
多重條件 [ ! -f "testfile" -o ! -r "testfile" ] [ test condition -o test condition ] ! 表示not -a 表示and -o 表示or通常比較常用的又有portable的就是上面一些用法。 美觀上來說用中括號condition比較好看,很多人為了autoconf的語法portable起見, 盡量用test的寫法。測試的結果當然放在$?中,0表示成功, 其他值表示失敗。
if [ "x$VAR" = "xvalue" ]; then .....來作$VAR是否是空的測試,尤其你如果先測試是否為空字串, 再測試是那個值要做什麼,這樣就會作兩次測試划不來,用這樣作比較經濟。
perl語法 if ($str1 eq $str2) if ($num1 == $num2)最後有個大比較,會一起列出shell perl c的差異來。(人老了記不住,我是這樣記 ,以perl為基準eq是字,所以前後是string,==是符號所以前後是number, bourne shell是怪胎,剛好顛倒,eq還要加個-符號。==要少一個=)
C語法 if (!strcmp(string1, string2)) if (num1 == num2)