他のコマンドの出力に基づいてコマンドを実行する

他のコマンドの出力に基づいてコマンドを実行する

オペレーティング・システム: AIX 7100-04-1216

したがって、基本的に私はシステムにどのボリュームグループがあるのか​​、そのボリュームグループにどのファイルシステムがあるのか​​、各ファイルシステムのサイズを確認するためにforループを作成しようとしています。

次のコードがあります。

for LINE in `lsvg` ; do
    echo "Volume Group: "${LINE}
    for LINE2 in `lsvgfs ${LINE}` ; do
        echo "`lsvgfs ${LINE}` \n"
        df -g ${LINE2}
    done
done

lsvgの出力

rootvg
nimvg

lsvgfsの出力(rootvg用)

/
/usr

lsvgfs出力(nimvg用)

/export/nim/lpp_source
/export/nim/spot 

df -g出力(ボリュームグループrootvgの/について)

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.25      2.86   46%     9957     2% /

df -g出力(ボリュームグループrootvgの/ usrについて)

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd2           2.00      0.17   92%    43194    50% /usr

df -g出力(ボリュームグループnimvgの/export/nim/lpp_sourceの場合)

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/fslv02       10.00      8.24   18%      597     1% /export/nim/lpp_source

df -g出力(ボリュームグループnimvgの/export/nim/spot)

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.25      2.86   46%     9957     2% /

やるべきこと:

Volume Group: rootvg
File System: /
/dev/hd4           5.25      2.86   46%     9957     2% /
File System: /usr
/dev/hd2           2.00      0.17   92%    43194    50% /usr
File System: /var

Volume Group: nimvg
File system: /export/nim/lpp_source
/dev/fslv02       10.00      8.24   18%      597     1% /export/nim/lpp_source
File system: /export/nim/spot 
/dev/hd4           5.25      2.86   46%     9957     2% /

私が得るもの:

Volume Group: rootvg
/
/usr
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.25      2.86   46%     9957     2% /
/
/usr
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd2           2.00      0.17   92%    43194    50% /usr


Volume Group: nimvg
/export/nim/lpp_source
/export/nim/spot 
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/fslv02       10.00      8.24   18%      597     1% /export/nim/lpp_source
/export/nim/lpp_source
/export/nim/spot 

Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           5.25      2.86   46%     9957     2% /

答え1

まず、スタイルに関する注意事項です。forループを使用して出力行を繰り返すのは良い考えではありません。ループはfor入力をスペースに分割するので、1行に複数の単語がある場合、各単語を異なる変数に分割します。whileスペースをよりエレガントに処理するので、それを使用する必要があります。また、を$(command)使用することが好ましい場合が多いです`command`

しかし、これはあなたの問題ではないかもしれません。主な問題は、lsvgfs ${LINE}各結果行の結果をエコーすることですlsvgfs ${LINE}

for LINE2 in `lsvgfs ${LINE}` ; do
        echo "`lsvgfs ${LINE}` \n"
done

もちろん、次の行は2回表示されます。

/
/usr

この試み:

lsvg | while read LINE; do
    echo "Volume Group: ${LINE}"
    lsvgfs "${LINE}" | while read LINE2; do
        echo "File System: ${LINE2}"
        df -g ${LINE2}
    done
echo ""
done

関連情報