在下面的部分中,您将看到我尝试在 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
,这绝对是not一个整数。
一个快速解决方案可能是将您的用法更改为:
df -k | sed -n '2,$p' | ./filter -c 50
or:
df -k | tail -n+2 | ./filter -c 50
这些额外过滤器中的任何一个(sed
or tail
) 将仅从第 2 行开始打印。
如果您愿意根本不需要特殊脚本,您可能可以使用以下内容:
df -k | awk -vlimit=40 '$5+0>=limit&&NR>1{print $5" "$6}'
它的工作方式是仅在满足以下条件的线路上运行:
- 第五个字段,转换为数字,至少等于传入的限制
-v
; and
- 记录数(行)为两条或更多。
然后它只是输出那些匹配行的相关信息。
这个特定的例子输出文件系统and使用情况(如百分比42%
)但是,如果您只想按照脚本使用文件系统,只需更改print
输出$6
在其自己的:{print $6}
.
或者,如果您do百分比但没有%
,您可以使用我在条件中使用的相同方法:{print $5+0" "$6}
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)