2012-07-22 54 views
0
#!/bin/bash 
if [$# -ne 1]; 
then 
    echo "/root/script.sh a|b" 
else if [$1 ='a']; 
then 
    echo "b" 
else if [$1 ='b']; then 
    echo "a" 
else 
    echo "/root/script.sh a|b" 
fi 

在Linux上面的腳本運行時出現錯誤。shell腳本:預期的整數表達式

bar.sh: line 2: [: S#: integer expression expected 
a 

您能否幫忙移除此錯誤?

+3

哎,我*希望你沒有在root帳戶中練習你的shell腳本。 – zwol 2012-07-22 18:35:48

+1

在轉錄錯誤信息或代碼時,錯誤信息中的'S#'看起來像拼寫錯誤'$#'。 – tripleee 2012-07-22 19:03:59

回答

5
if [$# -ne 1]; 

[]需要間距。例如:

if [ $# -ne 1 ]; 

而且else if應該elif

#!/bin/bash 
if [ "$#" -ne 1 ]; 
then 
    echo "/root/script.sh a|b" 
elif [ "$1" ='a' ]; 
then 
    echo "b" 
elif [ "$1" ='b' ]; then 
    echo "a" 
else 
    echo "/root/script.sh a|b" 
fi 

不要忘記引用變量。這不是每次都需要,但建議。

問題:爲什麼我有-1?

+0

''''''後面的分號只有在將'then'放在同一行時纔是必需的。 – zwol 2012-07-22 18:32:43

+0

我知道,但這沒有問題,所以我沒有改變它。 – Rayne 2012-07-22 18:34:29

+1

Doh!我沒有注意到原來的劇本是如此。 – zwol 2012-07-22 18:34:49

2

Bash不允許else if。相反,請使用elif

此外,您需要在[...]表達式中的間距。

#!/bin/bash 
if [ $# -ne 1 ]; 
then 
    echo "/root/script.sh a|b" 
elif [ $1 ='a' ]; 
then 
    echo "b" 
elif [ $1 ='b' ]; then 
    echo "a" 
else 
    echo "/root/script.sh a|b" 
fi