LINUX系统运维技术交流群:4930609

#!/bin/sh
ip_conns=`netstat -an | grep tcp | grep EST | wc -l`
messages=`netstat -ant | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'|tr -s '\n' ',' | sed -r 's/(.*),/\1\n/g' `
#echo $ip_conns
#echo $messages
if [$ip_conns -lt $1 ]
        then
        echo "$messages,OK -connect counts is $ip_conns"
        exit 0
fi
if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]
        then
        echo "$messages,Warning -connect counts is $ip_conns"
        exit 1
fi
if [ $ip_conns -gt $2 ]
        then
        echo "$messages,Critical -connect counts is $ip_conns"
        exit 2
fi
刚刚弄了一个nagios监控ip连接数的脚本。运行的时候一直报错 integer expression 具体if [ $ip_conns -gt $1  -a  $ip_conns -lt $2 ]
ip_conns是之前定义的检查ip连接数

改成使用"[[]]",逻辑运算符  "-a" 改成 "&&" 即可!

if [[ $ip_conns -gt $1 && $ip_conns -lt $2 ]]
        then
        echo "$messages,Warning -connect counts is $ip_conns"
        exit 1
fi
 

总结

1 所有字符 与逻辑运算符直接用“空格”分开,不能连到一起。

2 [[]] 运算符只是[]运算符的扩充。能够支持<,>符号运算不需要转义符,它还是以字符串比较大小。里面支持逻辑运算符:|| &&

3 另一种情况

  1. Shell脚本里,在用 test 的参数作比较的时候,如“ [ $temp -gt "100" ]”,
  2. 可能会出现的“ integer expression expected”错误。这是因为test 的这几个参数:
  3.  -gt ,-lt,-eq 比较的都是数字,因此变量temp如果是一个字符串的话就会出现上述错误了
  4. 将原句改为“ [ $temp -gt 100 ]” 结果也是一样的。