2009-12-12 35 views
0

HI all,如何檢測shell中的空值?

我寫了這段代碼,但它沒有捕獲任何兩個變量爲null,爲什麼?

echo "$var1 - $var2" 

if [ "$var1" == ""] || [ "$var2" == ""] 
then 
    echo "Incomplete data" 
    exit 1 
fi 

當我運行我的腳本,所以if語句應該正常工作時,初始回顯爲變量打印什麼?但它不是因爲某種原因。

+1

其實這個問題是存在的「」閉]之間沒有空格。哇! – goe 2009-12-12 18:13:13

+0

你在寫什麼外殼? Bourne shell的便攜性還是Bash? – 2009-12-12 18:22:16

回答

0

||在shell中有不同的含義。另外==不用於比較; =是。也許你的意思是:

if [ -z "$var1" -o -z "$var2" ] 

的手冊頁引用:

 
EXPRESSION1 -o EXPRESSION2 
       either EXPRESSION1 or EXPRESSION2 is true 

-z STRING 
       the length of STRING is zero 
+0

謝謝,但這不是在這種情況下 – goe 2009-12-12 18:13:46

2

它看起來像你,因爲你正在使用==和Bourne沒有寫一個bash腳本,如果我沒有記錯。

我明白你的問題是由於缺乏對括號前空間,但你應該讓你的if這個樣子的:

if [[ "$var1" == "" || "$var2" == "" ]] 

如果比它的執行速度更快沒有其他原因。但是,雙方括號也會向您購買additional capabilities

0

您可以使用情況/ ESAC

case "$var1$var2" in "") echo "null";; esac