sid Asked: 2018-08-29 07:09:20 +0800 CST2018-08-29 07:09:20 +0800 CST 2018-08-29 07:09:20 +0800 CST 使用 if else 在文件中搜索模式的 Shell 脚本 772 这是我的脚本,我想在文件中找到一个模式。grep -q '<Pattern>' '<file>' && echo $?如果找到模式,我知道退出状态为 0。但我得到如果:表达式语法错误。 if ( (grep -q '<Pattern>' '<file>' && echo $?)==0 ) then echo "Pattern found" else echo "Pattern not found" endif scripts tcsh 2 个回答 Voted Best Answer steeldriver 2018-08-29T07:27:41+08:002018-08-29T07:27:41+08:00 我强烈建议不要将csh(或其变体)用于新脚本,原因是这里讨论了为什么我不应该在 csh 中编程? 然而,正确的语法似乎是: if ( { grep -q 'Pattern' file } ) then echo "Pattern found" else echo "Pattern not found" endif 即内括号需要是大括号,{ ... }. 您无需回$?显即可测试退出状态。 或者,您可以使用$status变量: grep -q 'Pattern' file if ( $status == 0 ) then echo "Pattern found" else echo "Pattern not found" endif 在tcsh中,变量$status可以替换为$?- 但并非所有csh实现似乎都支持这一点。 JackyChan 2018-08-29T07:34:20+08:002018-08-29T07:34:20+08:00 我认为你没有用“fi”关闭条件。 在下面尝试它应该可以工作。 if ( (grep -q '' '' && echo $?)==0 ) then echo "Pattern found" else echo "Pattern not found" fi
我强烈建议不要将
csh
(或其变体)用于新脚本,原因是这里讨论了为什么我不应该在 csh 中编程?然而,正确的语法似乎是:
即内括号需要是大括号,
{ ... }
. 您无需回$?
显即可测试退出状态。或者,您可以使用
$status
变量:在
tcsh
中,变量$status
可以替换为$?
- 但并非所有csh
实现似乎都支持这一点。我认为你没有用“fi”关闭条件。
在下面尝试它应该可以工作。
if ( (grep -q '' '' && echo $?)==0 ) then echo "Pattern found" else echo "Pattern not found" fi