awkはifとelseケースを印刷します。

awkはifとelseケースを印刷します。

次のコマンドを作成しました。lsblk -nl /dev/sdd -o MOUNTPOINT | awk '{if (NR!=1 && $1) { print 1; } else { print 0; }}' 特定のデバイス(この場合)のパーティションがマウントされていることを/dev/sdd確認する必要があります。

しかし、何らかの理由でスクリプトは1と0の両方を印刷しますか?ポイントは何ですか?

マウントポイントが存在する場合はtrueと評価し、それ以外の場合はシェルスクリプトで使用するにはfalseと評価するにはこのコマンドが必要です。

答え1

awk各入力ラインでコードをループとして実行します。空でない行ごとにa1またはaを取得します。0あなたはできます

デバイスにマウントされたパーティションがあることを確認するには、次の方法を使用することをお勧めします。

device=/dev/mmcblk0
if [ -n "$(lsblk -nl -o MOUNTPOINT "$device")" ]
then
    echo "Partitions are mounted on $device"
else
    echo "Device $device is currently unused"
fi

本当にこのアプローチを維持したい場合は、awkこれがあなたが探しているものかもしれません。 (なぜ最初の行を無視したかったのかわかりません。私のテストでは、デバイス全体を指しているように見え、デバイス自体にファイルシステムが含まれている可能性があるため、スキップテストを削除しました。)

device=/dev/sdd
lsblk -nl "$device" -o MOUNTPOINT | awk 'NF { found=1 } END { print found+0 }'

関連情報