Bash检查文件是否存在,然后检查文件中的子字符串

时间:2018-09-05 17:55:51

标签: linux bash sed grep rhel

我要检查文件是否存在,然后检查文件中的子字符串

if [ -f /etc/abc.conf ]; then
   if [ grep 'abc.conf' -e 'host.com' ]
    test = 'PASS'
   else 
    test = 'FAIL'
   fi
else
   echo "File doesnot exist"
fi

echo $test

请告诉我是否有更好的方法来做同样的事情

2 个答案:

答案 0 :(得分:2)

是的,您的grep可能支持-s参数:

   -s, --no-messages
          Suppress error messages about nonexistent or unreadable files.

所以这样的事情应该起作用:

grep -qs 'abc.conf' '/etc/abc.conf' && test='PASS' || test='FAIL'

答案 1 :(得分:1)

如果文件不存在或不可读,则Grep返回2;如果找不到字符串,则Grep返回1。

grep -qs '<string>' file.txt
res=$?
if [ $res -eq 0 ]; then
  test='PASS'
elif [ $res -eq 1 ]; then
  test='FAIL'
elif [ $res -eq 2 ]; then
  echo "Cannot read file"
else
  echo "Unrecognized return code ($res) from grep"
fi