다른 명령의 출력을 기반으로 명령 실행

다른 명령의 출력을 기반으로 명령 실행

운영 체제: 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입력을 공백으로 분할하므로 한 줄에 여러 단어가 있으면 각 단어를 다른 변수로 나눕니다. while공백을 더 우아하게 처리하므로 이를 사용해야 합니다 . 또한 를 $(command)사용하는 것이 선호되는 경우가 많습니다 `command`.

그러나 이것은 당신의 문제가 아닐 수도 있습니다. 주요 문제는 lsvgfs ${LINE}각 결과 행에 대한 결과를 에코한다는 것입니다 lsvgfs ${LINE}.

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

물론 다음 줄은 두 번 표시됩니다.

/
/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

관련 정보