當我運行這個bash腳本:慶典:非法數
if [ [$EUID -ne 0] ]; then
echo "This script must be run as root" 1>&2
exit 1
else
printf " whathever "
exit 0
fi
我有這樣的錯誤:
./myScript: 15: [: Illegal number: [
你看不出什麼問題?
當我運行這個bash腳本:慶典:非法數
if [ [$EUID -ne 0] ]; then
echo "This script must be run as root" 1>&2
exit 1
else
printf " whathever "
exit 0
fi
我有這樣的錯誤:
./myScript: 15: [: Illegal number: [
你看不出什麼問題?
你有語法錯誤在你,如果條件下,使用此如果條件:
if [ "$EUID" -ne 0 ];
或使用
[[
和]]
if [[ "$EUID" -ne 0 ]];
如果使用KSH88 + /猛砸3+內部指令[[
,它使用了一倍左右變量的操作數的報價是沒有必要的:
[ ~/test]$ [[ $var2 = "string with spaces" ]] && echo "OK" || echo "KO"
OK
代替外部命令test
或他的貨叉[
:
[ ~/test]$ [ $var2 = "string with spaces" ] && echo "OK" || echo "KO"
bash: [: too many arguments
KO
[ ~/test]$ [ "$var2" = "string with spaces" ] && echo "OK" || echo "KO"
OK
當然,你還可以根據操作數的類型來選擇運營商:
[ ~/test]$ var1="01"
[ ~/test]$ [ "$var1" = "1" ] && echo "OK" || echo "KO"
KO
[ ~/test]$ [ "$var1" -eq "1" ] && echo "OK" || echo "KO"
OK
兩個建議除了其他人都已經指出了。
1)而不是做'else(因爲我們是root的代碼)fi',只需用'fi'替換'else'即可。一旦你測試了你關心的失敗情況並採取了適當的行動,就不需要繼續在條件的範圍內。
2)$ EUID是bashism,如果你想使這個移植到炮彈比如ksh,以取代它:
如果[$(ID -u)-ne 0];然後回聲「你不是根兄弟」;出口1; fi
將是一個很好的方法來做到這一點。
看起來它試圖比較'[EUID'對'0]'而不是'$ EUID'對'0' – Havenard
有趣的事實:http://en.wikipedia.org/wiki/Illegal_number – Akshay