在我的 bash 脚本中,如果文件中不存在某个字符串,我会尝试打印一行。
if grep -q "$user2" /etc/passwd; then
echo "User does exist!!"
如果我希望该字符串存在于文件中,这就是我的写法,但是如果在 /etc/passwd 文件中找不到用户,我该如何更改它以使其打印“用户不存在”?
答案1
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
答案2
您可以使用grep 选项“-L / --files-without-match”,检查文件是否不包含字符串:
if [[ $(grep -L "$user2" /etc/passwd) ]]; then
echo "User does not exist!!";
fi
答案3
另一种方法是查找 的退出状态grep
。例如:
grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
echo "User does not exist!!"
如果grep
找不到匹配项,它将退出1
,因此$?
也会退出1
。如果成功grep
总是会返回。0
所以使用起来$? != 0
比$? == 1
.
答案4
我用简单的一行代码解决了它:
for f in *.txt; do grep "tasks:" $f || echo $f; done
该命令将检查目录中具有 txt 扩展名的所有文件,如果找到,则写入搜索字符串(即“任务:”),否则写入文件名。