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