운영 체제: 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