当我运行这个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