当我运行这个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: [
你看到有什么问题吗?
答案 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
解决了我的情况。