linux的中括號條件判斷式易出現的問題及解決方法
在linux中,[ ]可以作為條件判斷式,結合if [ ];then.....fi使用。
在使用[]時,要注意,其中的每一部分都要用空格分開,中括號的前後都要有空格,if後面,then前面需要加空格!
以下面的程式為例:
1 #!/bin/bash
2 #該程式使用if ...,then...fi 做判斷,程式設定如下:
3 #1.當執行一個程式的時候,這個程式會讓使用者選擇Y或者N
4 #2.如果使用者輸入Y或y,就顯示『OK,continue』
5 #3.如果使用者輸入n或N,就顯示『Oh,interrupt!』
6 #4.如果不是Y/y/N/n之內的其它字元,就顯示『I don't know what your choice is』
7
8 #2011/10/15 goku first release
9
10 read -p "please input(Y/N):"
11
12 if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then #if後面,then前面都有空格;中括號開始後緊跟空格,結束前緊跟空格;==前後也有空格
13 echo "OK,continue"
14 exit 0
15 fi
16 if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
17 echo "oh,interrupt!"
18 exit 0
19 fi
20 #[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
21 #[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh,interrupt!" && exit 0
22 echo "I don't know what your choice is" && exit 0
~
如果在執行中出現下面的問題:
[: 15: y: unexpected operator
[: 15: y: unexpected operator
[: 19: y: unexpected operator
[: 19: y: unexpected operator
I don't know what your choice is
一般可能由以下幾點原因造成的:
1.空格出現問題;
2.檔案的第一行使用的是『#!/bin/sh』,應該是使用『#!/bin/bash』;
3.可能是使用:『sh 例項名』 執行的,應該要直接執行。也就是『chmod +x 例項名』,接著使用『./例項名』。
如果出現下面的問題:
./sh10.sh: 第 9 行: [: : 期待一元表示式
./sh10.sh: 第 13 行: [: : 期待一元表示式
./sh10.sh: 第 17 行: [: : 期待一元表示式
./sh10.sh: 第 21 行: [: : 期待一元表示式
則是由於中括號判斷式中『==』前後沒有空格導致的。
筆者在使用中,是因為使用了『#!/bin/sh』,害得我檢查了半天!