linux +计算IP地址的位数

linux +计算IP地址的位数

我编写了以下语法(存在于我的 ksh 脚本中)来查找 IP 地址中有多少位数字

IP_address=127.1.1.1
echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}'
4

IP_address=127.1.1
echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}'
3

请指教如何改进我的语法,使其更简单、更短、更快?(最好不使用 echo 命令),我们也可以使用 perl 或 awk 或 sed 等

例如我在代码中定义的内容

 if [[ ` echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}' ` -eq 3 ]]
        then

             three_octat=true


             elif  [[ ` echo  $IP_address | sed s'/\./ /g' | wc | awk '{print $2}' ` -eq 4 ]]

    then

          three_octat=false

         fi

答案1

来自厕所手册页

-w, --words 打印字数

这样你就可以摆脱管道末端的 awk。

echo  $IP_address | sed s'/\./ /g' | wc -w
4

您可以将管道的输出分配给变量

num_octets=$(echo  $IP_address | sed s'/\./ /g' | wc -w)
echo $num_octets
4

现在您有一个包含八位字节数的变量,您可以通过查询它来做任何您想做的事情,例如

#!/bin/ksh
IP_address=127
num_octets=$(echo  $IP_address | sed s'/\./ /g' | wc -w)
case $num_octets in
  "1" )
        echo "1 Octet" ;;
  "2" )
        echo "2 Otets" ;;
  "3" )
        echo "3 Octets" ;;
  "4" )
        echo "4 Octets" ;;
   *)
        echo "Invalid IPv4 Address"
esac

相关内容