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
}
检查
$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
好吧,要么没有提供限制的命令行选项,要么在处理参数时出现一些错误。