bash:非法号码

时间:2013-10-25 19:28:30

标签: bash shell

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

答案 0 :(得分:8)

if条件中存在语法错误,如果条件允许,请使用此选项:

if [ "$EUID" -ne 0 ];

或使用[[]]

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

答案 1 :(得分:4)

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

1)而不是做其他[代码串因为我们是root] fi'而只是替换' else'用' fi'。一旦您对所关注的失败情况进行了测试并采取了适当的措施,就无需继续处于有条件的范围内。

2)$ EUID是一种基础,如果您想将其移植到诸如ksh之类的shell中,请将其替换为:

  

if [$(id -u)-ne 0];然后回声"你不是根兄弟&#34 ;; 1号出口;网络

是一个很好的方法。

答案 2 :(得分:2)

  

if条件中存在语法错误,如果条件允许,请使用此选项:

if [ "$EUID" -ne 0 ];
     

或使用[[]]

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

如果您使用KSH88 + / Bash 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 

答案 3 :(得分:0)

使用

sudo bash shell_script.sh

代替

sudo sh shell_script.sh

解决了我的情况。