我不知道为什么会收到此错误 - > : integer expression expected: [: 82
值82来自CURRENT。我试图获取磁盘空间使用并分配给名为CURRENT的变量,然后通过电子邮件发送。我不知道我哪里出错了?任何帮助表示赞赏。
#!/bin/bash
ADMIN=email@email.com
THRESOLD=80
CURRENT=$(df -H | grep '/dev/mapper/cvs-cvs' | awk '{ print $5}' | cut -d'%' -f1)
if [ $CURRENT -ge $THRESOLD ]; then
echo "My CVS disk space usage is $CURRENT %" | mailx -s "Disk Space Usage" $ADMIN
fi
答案 0 :(得分:3)
可能您的脚本是DOS格式,分配包括\r
附加到数字的额外值会导致错误。尝试使用以下任一命令首先转换它:
sed -i 's|\r||' script
dos2unix script
答案 1 :(得分:1)
看起来您的CURRENT
值未被分配给命令替换输出中的整数。
我建议在你想要的目录上运行df
,然后解析输出。
#!/bin/bash
ADMIN=email@email.com
THRESOLD=80
read -ra DF_OUT < <(df -H /dev/mapper/cvs-cvs 2>&1|tail -n 1)
if [[ ${DF_OUT[@]} != "df:"* ]]; then
CURRENT=${DF_OUT[4]/\%/}
if [ $CURRENT -ge $THRESOLD ]; then
echo "My CVS disk space usage is $CURRENT %" | mailx -s "Disk Space Usage" $ADMIN
fi
else
echo -e "df encountered the following error:\n$DF_OUT"
fi
在继续解析磁盘使用结果之前,首先检查df
输出上的错误。
正如其他人所说,在脚本中使用-x
有助于诊断事物。
答案 2 :(得分:0)
尝试
#!/bin/bash
ADMIN=email@email.com
let "THRESOLD=80"
declare -i CURRENT
let CURRENT=$(df -H | grep '/dev/sda1' | awk '{ print $5}' | cut -d'%' -f1)
if (($CURRENT >= $THRESOLD )) ; then
echo "My CVS disk space usage is $CURRENT %" | mailx -s "Disk Space Usage" $ADMIN
fi