shell练习之判断输入是否是IP地址

小编:迷魂冰 更新时间:2022-08-22

这个题目有点意思,知识点比较多哟。

描述

写一个脚本统计文件nowcoder.txt中的每一行是否是正确的IP地址。

如果是正确的IP地址输出:yes

如果是错误的IP地址,四段号码的话输出:no,否则的话输出:error

假设nowcoder.txt内容如下

192.168.1.1
192.168.1.0
300.0.0.0
123

你的脚本应该输出

yes

yes

no

error

思路1:awk使用分隔符“.”然后判断$1$2$3$4是否满足条件,当然也可以使用for循环判断$i更简洁些,不过注意break:

awk -F "." '{if(NF!=4) print "error";\else if($1>255||$1<0||$2>255||$2<0||$3>255||$3<0||$4>255||$4<0) print "no";else print "yes"}' nowcoder.txt

awk -F "." '{if(NF!=4) print "error";else \{for(i=1;i<=4;i++) if($i<0||$i>255) {print "no";break}}if(i==5) print "yes"}' nowcoder.txt

思路2:当然是正则表达式,更加简洁明了:

awk -F "." '{ if(NF==4) { if($0 ~ /^((25[0-5]|2[0-4][0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-5]|1[0-9][0-9]|[0-9][0-9]|[0-9])$/) print "yes" else print "no" } else print "error"}' nowcoder.txt