Echo enter file name
Read file
Echo enter pattren
Read pattren
If [ grep $pattern $file ]
Then
Echo pattern found
Else
Echo not found
Fi
当我运行这个程序时,我得到了一个错误invalid operator grep
答案1
显然,您不想检查是否存在这样的字符串,grep $pattern $file
而是想检查命令是否有任何输出,因此类似这样的操作[[ $(grep foo bar) ]]
会起作用。或者正如@steeldriver 指出的那样,您可以简单地检查退出状态grep
:
echo "enter file name: "
read file
echo "enter pattern: "
read pattern
if grep -q "$pattern" "$file"; then
echo "yeah, got it"
else echo "nope, sorry, got nothing"
fi
显然,修复大写字母。Echo
不是一个命令。
答案2
该test
命令(也称为[
)具有特定运算符,您可以在手册中找到其列表man test
。因此,[ grep $pattern $file ]
是错误的,因为您给出了[
3 个它无法识别的参数。
您可能想要做的是 Zanna 展示的内容 -grep
在 if 语句中使用仅评估退出状态。或者,您可以将输出存储grep
到变量并检查该变量是否为非空,如下所示:
output=$(grep "$pattern" "$file" 2> /dev/null)
if [ -n "$output" ];
then
echo "Got something"
else
echo "Nothing"
fi
更常见的是,你会在实践中看到类似这样的事情:
if [ "x$output" != "x" ]
then
echo "Got something"
else
echo "Nothing"
fi