“无效运算符 grep”

“无效运算符 grep”
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

相关内容