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
據我了解,您的要求是,如果您獲得 grep 字串“::=BEGIN”的輸出,您想要回顯“失敗”..對嗎?我不確定你為什麼要使用“;” 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