直接给出脚本

#!/bin/bash

# 获取本机的网卡列表,并使用awk计算出本机的网卡数量
local_ifaces=$(ifconfig | awk -F: '/^[a-z]/  !/^lo/ {print $1}')
local_iface_count=$(echo "$local_ifaces" | wc -l) 

#使用netstat 命令列出所有ESTABLISHED的TCP连接
tcp_conns=$(netstat -n -t | awk '/^tcp/ {print $5}')

#初始化计数器
max_ip=""
max_count=0

#遍历所的TCP连接
for ip_and_port in $tcp_conns; do
  #使用awk分离出IP地址
  ip=$(echo "$ip_and_port" | awk -F: '{print $1}')
  if [ $ip -eq "10.111.3.199" ]; then
    continue
  fi
  #如果此IP地址不是本机的网卡地址,则计数器加1
  if ! grep -q "$ip" <<< "$local_ifaces"; then
    count=$((count+1))
  fi

  #如果计数器比当前最大值还在,则更新最大值
  if [ "$count" -gt "$max_count" ]; then
    max_ip="$ip"
    max_count="$count"
  fi
done

#输出结果
echo "最多TCP连接数的IP地址是 $max_ip, 连接数为 $max_count"

\QQ截图20231010170315.png Shell命令之“integer expression expected”的解决办法

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

   解决这个问题可以采取一种比较迂回的办法,即用awk工具对变量比较,返回比较的结果,再将比较的结果与相应的数字量进行比较。具体到上述例子,可以这样处理:
[ `echo ${TEMP} | awk -v tem="iPhone" '{print($1>tem)? "1":"0"}'` -eq "0" ]
1
   完整版:

if [ `echo ${VAR} | awk -v tem="iPhone9,2" '{print($1>tem)? "1":"0"}'` -eq "0" ]
then 
     echo iPhone 7 Plus
else
     echo 不可识别的设备
fi

最后我的代码是:


#!/bin/bash

# 获取本机的网卡列表,并使用awk计算出本机的网卡数量
local_ifaces=$(ifconfig | awk -F: '/^[a-z]/  !/^lo/ {print $1}')
local_iface_count=$(echo "$local_ifaces" | wc -l) 

#使用netstat 命令列出所有ESTABLISHED的TCP连接
tcp_conns=$(netstat -n -t | awk '/^tcp/ {print $5}')

#初始化计数器
max_ip=""
max_count=0

#遍历所的TCP连接
for ip_and_port in $tcp_conns; do
  #使用awk分离出IP地址
  ip=$(echo "$ip_and_port" | awk -F: '{print $1}')
  if [ `echo ${ip} | awk -v tem="10.56.3.1323" '{print($1>tem)? "1":"0"}'` -eq "0" ]
  then 
    continue
  fi
  #如果此IP地址不是本机的网卡地址,则计数器加1
  if ! grep -q "$ip" <<< "$local_ifaces"; then
    count=$((count+1))
  fi

  #如果计数器比当前最大值还在,则更新最大值
  if [ "$count" -gt "$max_count" ]; then
    max_ip="$ip"
    max_count="$count"
  fi
done

#输出结果
echo "最多TCP连接数的IP地址是 $max_ip, 连接数为 $max_count"