当我运行这个 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 条件中有语法错误,请使用以下 if 条件:
if [ "$EUID" -ne 0 ];
或使用[[
和]]
if [[ "$EUID" -ne 0 ]];
除了其他人已经指出的之外,还有两个建议。
而不是做else [bunch of code because we are root] fi
,只是替换else
为fi
。一旦您测试了您关心的故障条件并采取了适当的措施,就无需继续在条件主体内。
$EUID
是一种 bashism,如果您想让它移植到 ksh 等 shell,请将其替换为:
if [ $(id -u) -ne 0 ]; then echo "ur not root bro"; exit 1; fi
将是一个很好的方法。
您的 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
使用
sudo bash shell_script.sh
代替
sudo sh shell_script.sh
在我的情况下解决了。