shell bash:非法数字

iq0todco  于 2023-10-23  发布在  Shell
关注(0)|答案(5)|浏览(146)

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

你觉得有什么问题吗?

vohkndzv

vohkndzv1#

你的if条件中有语法错误,使用这个if条件:

if [ "$EUID" -ne 0 ];

或使用[[]]

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

r1zhe5dt2#

你的if条件中有语法错误,使用这个if条件:

if [ "$EUID" -ne 0 ];

或使用[[]]

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

如果使用KSH 88 +/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
irlmq6kh

irlmq6kh3#

除了其他人已经指出的之外,还有两个建议。
1.而不是做else [bunch of code because we are root] fi,只需将else替换为fi。一旦你已经测试了你所关心的失败条件并采取了适当的行动,就没有必要继续在条件的主体中。

  1. $EUID是一个语法错误,如果你想把它移植到ksh之类的shell上,可以把它替换为:
    if [ $(id -u) -ne 0 ]; then echo "ur not root bro"; exit 1; fi
    会是个好办法
ngynwnxp

ngynwnxp4#

使用

sudo bash shell_script.sh

而不是

sudo sh shell_script.sh

在我的案子里解决了。

mzsu5hc0

mzsu5hc05#

尝试

if [ $EUID -ne 0 ]

并使用/bin/bash而不是/bin/sh运行脚本。
如果从.sh文件执行,请确保添加shebang #!/bin/bash
既然你提到了bash,那么请确保你使用了正确的shell。
至少这解决了我的问题。希望有帮助。

相关问题