在下面的部分中,您将看到我尝试在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
$ _
答案 0 :(得分:2)
在该行之前说:
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 '$5+0>=limit&&NR>1{print $5" "$6}'
它的工作方式是仅在两者都行的情况下操作:
-v
传入的限制;和然后它只输出那些匹配行的相关信息。
此特定示例输出文件系统和用法(如42%
之类的百分比)但是,如果您只想根据脚本使用文件系统,只需更改{{1自己输出print
:$6
。
或者,如果你 百分比但没有{print $6}
,你可以使用我在条件中使用的相同方法:%
。