Shell 脚本使用 if else 在文件中搜索模式

Shell 脚本使用 if else 在文件中搜索模式

这是我的脚本,我想在文件中查找模式。我知道grep -q '<Pattern>' '<file>' && echo $?如果找到模式,退出状态为 0。但我得到了if:表达式语法错误。

 if ( (grep -q '<Pattern>' '<file>' && echo $?)==0  ) then
 echo "Pattern found"
 else
 echo "Pattern not found"
 endif

答案1

我强烈建议不要csh在新脚本中使用(或其变体),原因请见此处为什么我不应该用 csh 编程?

然而正确的语法似乎是:

if ( { grep -q 'Pattern' file } ) then
  echo "Pattern found"
else
  echo "Pattern not found"
endif

即内部括号需要用大括号括起来。{ ... }您不需要 echo 来$?测试退出状态。

或者,您可以使用$status变量:

grep -q 'Pattern' file
if ( $status == 0 ) then
  echo "Pattern found"
else
  echo "Pattern not found"
endif

在 中tcsh,变量$status可以被替换为$?- 但并非所有csh实现都支持这一点。

答案2

我认为你没有用“fi”关闭条件。

尝试以下它应该有效。

如果((grep -q''''&&echo $?)==0)则 echo“找到模式”否则 echo“未找到模式”fi

相关内容