我正在编写一个 bash 脚本,如果用户不是 root,我想退出该脚本。条件运行正常,但脚本不退出。
[[ `id -u` == 0 ]] || (echo "Must be root to run script"; exit)
我尝试过使用&&
代替,;
但都不起作用。
答案1
你可以这样做:
[[ $(id -u) -eq 0 ]] || { echo >&2 "Must be root to run script"; exit 1; }
(第一个语句中带有算术二元运算符的“普通”条件表达式),或者:
(( $(id -u) == 0 )) || { echo >&2 "Must be root to run script"; exit 1; }
(第一次测试的算术评估)。
注意变化()
->{}
- 大括号确实不是产生一个子shell。 (搜索man bash
“子外壳”。)
答案2
这些命令周围的括号创建了一个子外壳。你的子 shell 会回显“必须是 root 才能运行脚本”,然后你告诉子外壳退出(尽管它已经退出,因为没有更多命令)。修复它的最简单方法可能就是使用if
:
if [[ `id -u` != 0 ]]; then
echo "Must be root to run script"
exit
fi
答案3
和巴什:
[ $UID -ne 0 ] && echo "Must be root to run script" && exit 1
答案4
这可能对你有帮助,在bash中
[oracle@rac1 ~]$ which bash
/bin/bash
[oracle@rac1 ~]$ cat test1.sh
if [ `id -u` != 0 ]
then
echo "Must be root to run the script
"
exit
fi