如何使用正则表达式来处理文字数字

如何使用正则表达式来处理文字数字

我正在编写一个脚本来 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= 大于等于,参见更多这里

相关内容