![如何使用正则表达式来处理文字数字](https://linux22.com/image/695962/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9D%A5%E5%A4%84%E7%90%86%E6%96%87%E5%AD%97%E6%95%B0%E5%AD%97.png)
我正在编写一个脚本来 curl 网页并 grep/sed/sort/tail 查找数字,然后使用 nagios 退出代码进行监控。我的 bash 脚本如下:
queue= curl -s 'site | grep -ohE 'READY":[0-9]+' |\
sed 's/READY"://' | sort -n | tail -1
if [[ $queue =~ [0-1] ]]; then
echo "OK - $queue current jobs."
exit 0
fi
if [[ $queue =~ [2-3] ]]; then
echo "WARNING - $queue current jobs in queue."
exit 1
fi
if [[ $queue =~ [4-100] ]]; then
echo "CRITICAL - $queue current jobs in queue."
exit 2
fi
我遇到的问题是,它返回以 3 开头的任何数字作为警告,例如 3、30、300 等,而不仅仅是 3。
WARNING - 39 current jobs in queue.
警告应仅包含 2-3 个作业,关键应包含 4-100 个作业,正常应包含 0-1 个作业。
我该如何设置数字范围,使其仅退出个位数而不是多位数字?
答案1
不要使用正则表达式。这些是数字,应按数字处理。
if [ $queue -lt 2 ]; then
echo "OK - $queue current jobs."
exit 0
fi
if [ $queue -lt 4 ]; then
echo "Warning - $queue current jobs."
exit 1
fi
if [ $queue -ge 4 ]; then
echo "CRITICAL"
exit 2
fi
-lt
= 小于;-ge
= 大于等于,参见更多这里