我编写了以下语法(存在于我的 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