在我的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