=0 未找到命令 bash

=0 未找到命令 bash
grep "::=BEGIN" -q < /home/erawson/bin/HP/adaptec.mib
CHK= echo $?
if ($CHK = "0") ; then
echo "failed"
else    
     exit
fi

错误是:

/home/erawson/bin/try1: line 10: =: command not found

答案1

将 if 语句改为if [ $CHK -eq 0 ]; then。注意方括号之间的空格。

变量 CHK 也必须像这样分配CHK=$(echo $?)

脚本看起来应该是这样的:

#!/bin/bash
grep "::=BEGIN" -q < testfile1.txt    
CHK="$?"
if [ "$CHK" -eq 0 ] ; then
        echo "failed"
else
    exit
fi

答案2

正如已经指出的那样,您在那里有几个语法错误。您似乎还使用了有缺陷的逻辑。退出状态表示0命令成功,而不是失败。如果您想要打印failed文件是否没有匹配查询字符串,您所需要的是:

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib || echo "failed"

如果你想打印failed文件火柴字符串,使用这个:

grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib && echo "failed"

无需保存退出状态,也无需进行 if/else 检查。

答案3

据我了解,您的要求是,如果您获得 grepping 字符串“::=BEGIN”的输出,您想要回显“failed”..对吗?我不确定为什么您在 if 之后使用了“;”...再次使用了“then”

您可以尝试以下操作


if [ -n `grep -q "::=BEGIN" /home/erawson/bin/HP/adaptec.mib` ]
then
        echo "failed"
else
        exit
fi

希望这有帮助!!(根据我的假设)

答案4

您只需要一对额外的括号:

grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib
if (("$?" = "0")); then
    echo "failed"
else
    exit
fi
  • 正确的算术运算符语法是((

  • 另外,由于您只是使用退出代码$?,因此无需将其保存在另一个变量中,您可以直接使用它。

这可以进一步简化为:

if grep -q "::=BEGIN" </home/erawson/bin/HP/adaptec.mib; then
    echo "failed"
else
    exit
fi

相关内容