bash中的hdd脚本 - 奇怪的输出

时间:2017-09-29 10:39:01

标签: bash

尝试通过脚本检查可用的hdd空间:

 df -h :
 Filesystem      Size  Used Avail Use% Mounted on
 /dev/sda3        18G  9.1G  8.7G  52% /

命令是:

 com=`df -h | awk '{print $5}' | grep % | grep -v Use | sort -n | tail -4 | cut -d % -f1`
 echo $com
 52 74 100 100

我想为我的支票隔离“52”,所以:

    for i in ${com[@]};do
    > echo ${com[0]:0:2}
    > done
      52
      52
      52
      52

好的,我设法为后来的检查检索了正确的数字,但为什么命令会返回数字“52”四次?

非常感谢

1 个答案:

答案 0 :(得分:1)

您不希望在这个简单的用例中使用bash脚本。此外,您正在使用一堆awkgrep命令将输出存储在变量中,而不是存储在数组的上下文中。

您只需使用简单的Awk命令

即可
df -h | awk 'NR==1{for(i=1;i<=NF;i++) if ($i == "Use%"){ ind=i; break}} NR==2 {n=split($0, val); used=val[ind]; sub(/%/,"",used); print used}'

上述命令首先查找标题行中存储了Use%的列,然后在下一行的同一列中查找实际值。

要在变量存储中使用输出,命令替换的输出如下

used_storage=$(df -h | awk 'NR==1{for(i=1;i<=NF;i++) if ($i == "Use%"){ ind=i; break}} NR==2 {n=split($0, val); used=val[ind]; sub(/%/,"",used); print used}')
echo "$used_storage"