语法错误:需要操作数(错误标记为“/”)

问题描述 投票:0回答:1

DSKUSDPERCENT=$(($DISKUSD * 100 / $limit)) 通过错误,如 语法错误:需要操作数(错误标记为“/”) 其中 limit=$OPTARG 在处理命令行选项中定义

这里我无法获取$limit的值

{
doopts() {
    if ( `test 0 -lt $#` ) then
        while getopts w:c:p:l:h myarg "$@"
        do
            case $myarg in
                h|\?)
                    usage
                    exit
                    ;;
                w)
                    level_warn=$OPTARG
                    warn_cnt=`echo $OPTARG | cut -d ',' -f 1`
                    ;;
                c)
                    level_crit=$OPTARG
                    crit_cnt=`echo $OPTARG | cut -d ',' -f 1`
                    ;;
                p)
                    path=$OPTARG
                    ;;
                l)
                    limit=$OPTARG
                    ;;
                *)  # Default
                    usage
                    exit
                    ;;
            esac
        done
                else
        usage
        exit
    fi
}
doopts $@
DISKUSD=0
DISKUSD=$(df -Ph $path |  tail -1 | awk '{print $5}'|sed 's/%//')
#sed is used to remove the % sign from the output
DISKAVAILABLE=$(df -Ph $path |  tail -1 | awk '{print $4}')

DISKUSED=$(df -P $path -B 1000000000 |  tail -1 | awk '{print $3}')
DSKUSDPERCENT=$(($DISKUSED * 100 / $limit))

if [ $DSKUSDPERCENT -lt $warn_cnt ] ; then
  echo "OK - $DSKUSDPERCENT% disk used on $path, available space is $DISKAVAILABLE (W> $level_warn, C> $level_crit) | PercentUsed=$DSKUSDPERCENT%;$warn_cnt;$crit_cnt"
exit $STATE_OK

}

bash shell nagios
1个回答
1
投票

检查

$limit
值:

$ DISKUSD="1000"
$ limit="100"
$ echo $(($DISKUSD * 100 / $limit))
1000
$ limit=''
$ echo $(($DISKUSD * 100 / $limit))
bash: 1000 * 100 / : syntax error: operand expected (error token is "/ ")

所以,

$limit
很可能是空的,这样表达式就变成了类似
$((666 * 100 / ))
的东西,这当然是无效的。

其中限制=$OPTARG

好吧,要么没有提供限制的命令行选项,要么在处理参数时出现一些错误。

© www.soinside.com 2019 - 2024. All rights reserved.