操作系统: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