=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

私が理解している限り、あなたの要件は、文字列「::=BEGIN」を grep して出力を取得した場合、「failed」をエコーし​​たいということですね?? また、if の後に「;」を使用した理由がわかりません...また、「then」を使用しました

以下のことを試してみてください


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

これが役に立つことを願います!! (私の推測によると)

答え4

追加の括弧が 1 つ必要になります。

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

関連情報