我正在写一个脚本来安装Bash的程序。 我想退出,所以我添加了set -e到我的脚本的开始。
我必须检查用户是否存在于我的脚本中。 为此,我使用grep ^${USER}: /etc/passwd 。 如果用户存在,脚本正常运行。 但是,如果用户不存在,该命令将退出。 如果后一种情况发生,我不想退出。 相反,我想创build用户并继续我的安装。
什么是使我的脚本继续运行的解决scheme? 我试图将grep的输出redirect到一个variables,但我仍然有同样的问题。
你总是可以做下面的事情。 基本上禁用你正在运行的命令周围的退出检查。
#!/bin/bash set -e # eanble exit checking lorem ipsum dolor sit amet # temp disable exit checking set +e grep "^${USER}:" /etc/passwd set -e consectetur adipiscing elit
除了已经提出的build议之外,还有两个select。 首先,您可以提供一个保证成功的替代命令:
grep "^${USER}:" /etc/passwd || true
(基本上,如果grep命令失败,这将运行true ,因为总是成功,它会考虑复合命令已经成功,不会退出脚本。)
或者,由于您的兴趣是grep是否成功(即是否需要添加用户),只需将其用作if语句中的条件即可:
if ! grep "^${USER}:" /etc/passwd; then # Create the user account fi # Continue installation...
(请注意,在grep命令之前!否定了testing,所以只有当grep失败时才会运行if语句的主体。由于grep是复合命令的一部分,因此如果失败,脚本不会退出)。
解决办法是不使用set -e ,这可能是相当危险的。 使用if语句代替。
grep "^${USER}:" /etc/passwd &>/dev/null if [ $? -eq 1 ] then #create user here ... ft
一个build议是运行该检查并安装在()内的子shell中。 会为你工作吗?