当我运行这个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: [
你觉得有什么问题吗?
vohkndzv1#
你的if条件中有语法错误,使用这个if条件:
if [ "$EUID" -ne 0 ];
或使用[[和]]
[[
]]
if [[ "$EUID" -ne 0 ]];
r1zhe5dt2#
如果使用KSH 88 +/Bash 3+内部指令[[,则不必在变量操作数周围使用双引号:
[ ~/test]$ [[ $var2 = "string with spaces" ]] && echo "OK" || echo "KO" OK
而不是外部命令test或他的fork [:
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
irlmq6kh3#
除了其他人已经指出的之外,还有两个建议。1.而不是做else [bunch of code because we are root] fi,只需将else替换为fi。一旦你已经测试了你所关心的失败条件并采取了适当的行动,就没有必要继续在条件的主体中。
else [bunch of code because we are root] fi
else
fi
$EUID
if [ $(id -u) -ne 0 ]; then echo "ur not root bro"; exit 1; fi
ngynwnxp4#
使用
sudo bash shell_script.sh
而不是
sudo sh shell_script.sh
在我的案子里解决了。
mzsu5hc05#
尝试
if [ $EUID -ne 0 ]
并使用/bin/bash而不是/bin/sh运行脚本。如果从.sh文件执行,请确保添加shebang #!/bin/bash。既然你提到了bash,那么请确保你使用了正确的shell。至少这解决了我的问题。希望有帮助。
/bin/bash
/bin/sh
.sh
#!/bin/bash
5条答案
按热度按时间vohkndzv1#
你的if条件中有语法错误,使用这个if条件:
或使用
[[
和]]
r1zhe5dt2#
你的if条件中有语法错误,使用这个if条件:
或使用
[[
和]]
如果使用KSH 88 +/Bash 3+内部指令
[[
,则不必在变量操作数周围使用双引号:而不是外部命令
test
或他的fork[
:当然,你也必须根据操作数的类型来选择操作符:
irlmq6kh3#
除了其他人已经指出的之外,还有两个建议。
1.而不是做
else [bunch of code because we are root] fi
,只需将else
替换为fi
。一旦你已经测试了你所关心的失败条件并采取了适当的行动,就没有必要继续在条件的主体中。$EUID
是一个语法错误,如果你想把它移植到ksh之类的shell上,可以把它替换为:if [ $(id -u) -ne 0 ]; then echo "ur not root bro"; exit 1; fi
会是个好办法
ngynwnxp4#
使用
而不是
在我的案子里解决了。
mzsu5hc05#
尝试
并使用
/bin/bash
而不是/bin/sh
运行脚本。如果从
.sh
文件执行,请确保添加shebang#!/bin/bash
。既然你提到了bash,那么请确保你使用了正确的shell。
至少这解决了我的问题。希望有帮助。