bash误差:预期整数表达式



在下面的各节中,您会看到我要在Unix机器上运行的Shell脚本以及成绩单。

当我运行此程序时,它给出了预期的输出,但也给出了成绩单中显示的错误。有什么问题,我该如何解决?

首先,脚本:

#!/usr/bin/bash
while read A B C D E F
do
    E=`echo $E | cut -f 1 -d "%"`
    if test $# -eq 2
    then
        I=`echo $2`
    else
        I=90
    fi
    if test $E -ge $I
    then
        echo $F
    fi
done

和运行它的成绩单:

$ df -k | ./filter.sh -c 50
./filter.sh: line 12: test: capacity: integer expression expected
/etc/svc/volatile
/var/run
/home/ug
/home/pg
/home/staff/t
/packages/turnin
$ _

在说:

之前
if test $E -ge $I

暂时放置该行:

echo "[$E]"

您会发现一些非常非数字的东西,这是因为df -k的输出看起来像这样:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sdb1      954316620 212723892 693109608  24% /
udev               10240         0     10240   0% /dev
: :

有问题的线是第一个,它将其第五个字段Use%变成Use,这绝对不是不是整数。

快速修复可能是将您的用法更改为:

df -k | sed -n '2,$p' | ./filter -c 50

或:

df -k | tail -n+2 | ./filter -c 50

这些额外的过滤器(sedtail)中的任何一个都只能从第2行开始打印。


如果您完全不需要特殊脚本,那么您可能只能摆脱以下内容:

df -k | awk -vlimit=40 '$5+0>=limit&&NR>1{print $5" "$6}'

它的工作方式是仅在两者的线路上操作:

  • 第五个字段转换为一个数字,至少等于用-v传递的限制;和
  • 记录号(线)为两个或更高。

然后,它只是输出这些匹配行的相关信息。

此特定示例输出文件系统 and 用法(如42%这样的百分比),但是,如果您只需按照脚本就文件系统,只需将print更改为单独输出$6{print $6}

另外,如果您 do 百分比,但是如果没有%,则可以使用我在条件中使用的相同方法: {print $5+0" "$6}

相关内容

  • 没有找到相关文章

最新更新