我的shell脚本如下所示:
#!/bin/bash
# Make sure only root can run our script
[ $EUID -ne 0 ] && (echo "This script must be run as root" 1>&2) || (exit 1)
# other script continues here...
当我使用非root用户运行上述脚本时,它会输出消息"此脚本..."但它不会退出那里,它继续剩下的脚本。我做错了什么?
注意:我不想使用if条件。
答案 0 :(得分:5)
您在子广告中正在运行echo
和exit
。退出调用只会留下子shell,这有点无意义。
尝试:
#! /bin/sh
if [ $EUID -ne 0 ] ; then
echo "This script must be run as root" 1>&2
exit 1
fi
echo hello
如果由于某种原因您不想要if
条件,请使用:
#! /bin/sh
[ $EUID -ne 0 ] && echo "This script must be run as root" 1>&2 && exit 1
echo hello
注意:没有()
和固定的布尔条件。警告:如果echo
失败,该测试也将无法退出。 if
版本更安全(更易读,更易于维护IMO)。
答案 1 :(得分:1)
我认为您需要&&
而不是||
,因为您希望回显和退出(而不是echo 或退出)。
此外,(exit 1)
将运行一个退出而不是退出当前shell的子shell。
以下脚本显示了您的需求:
#!/bin/bash
[ $1 -ne 0 ] && (echo "This script must be run as root." 1>&2) && exit 1
echo Continuing...
使用./myscript 0
运行此功能会为您提供:
Continuing...
而./myscript 1
给你:
This script must be run as root.
我相信这就是你要找的东西。
答案 2 :(得分:1)
我会把它写成:
(( $EUID != 0 )) && { echo "This script must be run as root" 1>&2; exit 1; }
使用{ }
进行分组,该分组在当前shell中执行。请注意,大括号周围的空格和结束的分号是必需的。