整数表达式预期错误。

时间:2014-08-04 22:09:59

标签: linux bash shell unix sh

我不知道为什么会收到此错误 - > : 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

3 个答案:

答案 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