=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

據我了解,您的要求是,如果您獲得 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

相關內容