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