1

次のコマンドは、次の条件で 0 (真) または 1 (偽) を返すことを知っています。

hdparm -C /dev/sda |grep "active/idle"

ディスクがアクティブな場合は true、そうでない場合は false。この結果をプログラムで使用して、別のテキストを表示したり、監視に使用したりしたいと考えています。私はこれを試しましたが、うまくいきません (構文エラー):

if [ hdparm -C /dev/sda |grep "active/idle" ]; then
    echo sda1 is ON
else
    echo sda1 is OFF
fi

それはどのように正しく機能しますか?

また、Bash の条件式に関する明確に理解できる決定的なガイドがどこかにあり、考えられるすべての状況でさまざまな種類の式ステートメントをすべて説明していますか?

4

2 に答える 2

1

条件ステートメントをサブシェル内にラップします。

if [ -z "$(hdparm -C /dev/sda |grep "active/idle")" ]; then

-zここで空の文字列をテストします。おそらくあなたも交換active/idleする必要がありますactive

編集: @abasu が示唆するように、この場合、式が一致した場合は 0 になる grep の戻りコードをテストすることをお勧めします。

hdparm -C /dev/sda | grep -q "active/idle"
status=$?
if [ $status -eq 0]; then

条件文の詳細については、test のマニュアル ページを参照してください。ただし、シェルは bash のように構文をさらに拡張する場合があります。

于 2013-05-09T10:03:50.140 に答える