1. 程式人生 > >linux的中括號條件判斷式易出現的問題及解決方法

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
~

如果在執行中出現下面的問題:

please input(Y/N):y
[: 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』,害得我檢查了半天!