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
这些额外的过滤器(sed
或 tail
)中的任何一个都只会从第 2 行开始打印。
如果您愿意接受根本不需要特殊脚本的想法,您可能只需使用以下内容即可:
df -k | awk -vlimit=40 '+0>=limit&&NR>1{print " "}'
它的工作方式是只对同时满足以下条件的行进行操作:
- 第五个字段,转换为数字,至少等于
-v
传入的limit;和
- 记录数(行)大于等于2
然后它简单地输出那些匹配行的相关信息。
此特定示例输出文件系统 和 使用情况(以百分比表示,如 42%
)但是,如果您只希望文件系统符合您的脚本,只需将 print
更改为自己输出 </code>:<code>{print }
.
或者,如果您 执行 百分比但没有 %
,您可以使用我在条件语句中使用的相同方法:{print +0" "}
.
在下面的部分中,您将看到我尝试在 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
这些额外的过滤器(sed
或 tail
)中的任何一个都只会从第 2 行开始打印。
如果您愿意接受根本不需要特殊脚本的想法,您可能只需使用以下内容即可:
df -k | awk -vlimit=40 '+0>=limit&&NR>1{print " "}'
它的工作方式是只对同时满足以下条件的行进行操作:
- 第五个字段,转换为数字,至少等于
-v
传入的limit;和 - 记录数(行)大于等于2
然后它简单地输出那些匹配行的相关信息。
此特定示例输出文件系统 和 使用情况(以百分比表示,如 42%
)但是,如果您只希望文件系统符合您的脚本,只需将 print
更改为自己输出 </code>:<code>{print }
.
或者,如果您 执行 百分比但没有 %
,您可以使用我在条件语句中使用的相同方法:{print +0" "}
.