我有以下脚本来检查磁盘使用情况
#!/bin/bash
# set alert level 90% is default
ALERT=10
OIFS=$IFS
IFS=','
storage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }')
for output in $storage ;
do
echo "---------------@@@@@@@@@ output started @@@@@@@@@@@@@@@@-----------"
echo $output
echo "---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------"
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
echo "---------------###### useo started ######-----------"
echo $usep
echo "---------------###### usep end ######-----------"
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done
但是当我运行此代码时,我在 if 条件语句中收到整数表达式预期错误,这是此脚本的输出
97% /dev/sda1
1% udev
0% none
2% none
---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------
---------------###### useo started ######-----------
97
1
0
2
---------------###### usep end ######-----------
./fordiskfor.sh: line 24: [: 97
1
0
2: integer expression expected
答案1
问题就在那里:
if [ $usep -ge $ALERT ]; then
...
fi
$usep
包含多行数字。要循环使用所有这些,请使用类似这样的东西而不是该部分:
for $space in $usep;
do
if [ $space -ge $ALERT ]; then
echo "Running out of space..."
fi
done
答案2
存储在变量中的值$storage
由多行组成。因此,$output
也将包含多行,因此将$usep
。
$usep
您可以使用另一个循环,逐一提取并比较存储在 中的所有值,for
如中所述这回答。或者您可以使用while
如下语句:
echo $storage | while read output
do
...
...
if [ $usep -ge $ALERT ]; then
echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
fi
done