bash : "set -e" 并检查用户是否存在使脚本退出

Ahm*_*abi 3 scripting linux shell bash grep

我正在编写一个脚本来安装 Bash 程序。我想在出错时退出,所以我添加set -e到脚本的开头。

我必须检查我的脚本中是否存在用户。为此,我正在使用grep ^${USER}: /etc/passwd. 如果用户存在,则脚本正常运行。但是,如果用户不存在,则此命令将退出。如果发生后一种情况,我不想退出。相反,我想创建用户并继续我的安装。

使我的脚本继续运行的解决方案是什么?我试图将 的输出重定向grep到一个变量,但我仍然遇到同样的问题。

Zor*_*che 7

你总是可以做类似下面的事情。基本上禁用围绕您正在运行的命令的退出检查。

#!/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
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 6

除了已经给出的建议,这里还有两个选择。首先,您可以提供一个可以保证成功的备用命令:

grep "^${USER}:" /etc/passwd || true
Run Code Online (Sandbox Code Playgroud)

(基本上,如果grep命令失败,true它将运行,并且由于它总是成功,它会认为复合命令已成功并且不会退出脚本。)

或者,由于您的兴趣是 grep 是否成功(即是否需要添加用户),只需将其用作if语句中的条件:

if ! grep "^${USER}:" /etc/passwd; then
    # Create the user account
fi
# Continue installation...
Run Code Online (Sandbox Code Playgroud)

(请注意,命令!之前的grep命令否定测试,因此它仅在grep失败时运行 if 语句的主体。由于grep是复合命令的一部分,因此脚本在失败时不会退出。)