我在 Bash 中有一个简单的脚本来读取文件中的数字,然后将其与不同的阈值进行比较。输出是这样的:
: integer expression expected
: integer expression expected
OK: 3
我的代码是这样的:
#!/bin/bash
wget=$(wget http://10.228.28.8/ -O /tmp/wget.txt 2>/dev/null)
output=$(cat /tmp/wget.txt | awk 'NR==6')
#output=7
echo $output
if [ $output -ge 11 ];then
echo "CRITICAL: $output"
exit 2
elif [ $output -ge 6 ] && [ $output -lt 11 ];then
echo "WARNING: $output"
exit 1
else
echo "OK: $output"
exit 0
fi
rm /tmp/wget.txt
我知道问题出在哪里,我知道我正在读取一个字符串并尝试比较一个 int。但我不知道我该怎么做才能读取这个文件并将数字转换为在 int var 中读取..
有什么想法吗?
最佳答案
当$output
为空字符串时出现问题;无论你是否引用扩展(你应该),你都会得到 integer expression required 错误。您需要显式处理空字符串,默认值为零(或任何有意义的默认值)。
wget=$(wget http://10.228.28.8/ -O /tmp/wget.txt 2>/dev/null)
output=$(awk 'NR==6' < /tmp/get.txt)
output=${output:-0}
if [ "$output" -ge 11 ];then
echo "CRITICAL: $output"
exit 2
elif [ "$output" -ge 6 ];then
echo "WARNING: $output"
exit 1
else
echo "OK: $output"
exit 0
fi
(如果你到达elif
,你已经知道$output
的值小于11;不需要再检查。)
如果 output
以回车结束,也会出现该问题,与错误信息一致。你可以删除它
output=${output%$'\r'}
关于string - 读取字符串并转换为 INT (BASH),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38395450/