Bash error: Integer expression expected

Bash error: Integer expression expected

在下面的部分中,您将看到我尝试在 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 `
    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 '+0>=limit&&NR>1{print " "}'

它的工作方式是只对同时满足以下条件的行进行操作:

  • 第五个字段,转换为数字,至少等于-v传入的limit;和
  • 记录数(行)大于等于2

然后它简单地输出那些匹配行的相关信息。

此特定示例输出文件系统 使用情况(以百分比表示,如 42%)但是,如果您只希望文件系统符合您的脚本,只需将 print 更改为自己输出 </code>:<code>{print }.

或者,如果您 执行 百分比但没有 %,您可以使用我在条件语句中使用的相同方法:{print +0" "}.