7

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

你看有什么问题吗?

4

4 回答 4

9

您的 if 条件中有语法错误,请使用以下 if 条件:

if [ "$EUID" -ne 0 ];

或使用[[]]

if [[ "$EUID" -ne 0 ]];
于 2013-10-25T19:29:43.613 回答
4

除了其他人已经指出的之外,还有两个建议。

  1. 而不是做else [bunch of code because we are root] fi,只是替换elsefi。一旦您测试了您关心的故障条件并采取了适当的措施,就无需继续在条件主体内。

  2. $EUID是一种 bashism,如果您想让它移植到 ksh 等 shell,请将其替换为:

if [ $(id -u) -ne 0 ]; then echo "ur not root bro"; exit 1; fi

将是一个很好的方法。

于 2014-07-09T22:57:28.380 回答
4

您的 if 条件中有语法错误,请使用以下 if 条件:

if [ "$EUID" -ne 0 ];

或使用[[]]

if [[ "$EUID" -ne 0 ]];

如果您使用 KSH88+/Bash 3+ 内部指令[[,则不必在变量操作数周围使用双引号:

[ ~/test]$ [[ $var2 = "string with spaces" ]] && echo "OK" || echo "KO" 
OK 

而不是外部命令test或他的 fork [

[ ~/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 
于 2013-10-25T20:05:48.423 回答
1

使用

sudo bash shell_script.sh

代替

sudo sh shell_script.sh

在我的情况下解决了。

于 2019-06-29T04:13:29.953 回答