在我的bash脚本中,如果文件中不存在某个字符串,我将尝试打印一行。
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
如果我希望该字符串存在于文件中,这就是我写的方式,但是如果在/ etc / passwd文件中找不到该用户,该如何更改它以使其显示“用户不存在”?
在我的bash脚本中,如果文件中不存在某个字符串,我将尝试打印一行。
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
如果我希望该字符串存在于文件中,这就是我写的方式,但是如果在/ etc / passwd文件中找不到该用户,该如何更改它以使其显示“用户不存在”?
Answers:
grep
如果找到至少一个模式实例,将返回成功,否则将返回失败。因此,else
如果您希望同时打印“确实”和“不想要”,则可以添加一个子句,也可以否定if
条件以仅获得失败。每个示例:
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
else
echo "User does not exist!!"
fi
if ! grep -q "$user2" /etc/passwd; then
echo "User does not exist!!"
fi
另一种方法是查找的退出状态grep
。例如:
grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
echo "User does not exist!!"
如果grep
未能找到匹配它会退出1
,所以$?
会1
。如果成功,grep
将始终返回0
。因此,使用起来$? != 0
比更加安全$? == 1
。
if ! grep ...
陈述是行不通的。所以这是另一种选择。
您可以使用grep选项“ -L / --files-without-match”来检查文件是否不包含字符串:
if [[ $(grep -L "$user2" /etc/passwd) ]]; then
echo "User does not exist!!";
fi