标题: shell检查输入的字符串是不是ip 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Sun, 12 Jun 2016 16:16:17 +0000 作者:jackxiang 地址:http://jackxiang.com/post/8744/ 内容: 每天早上2-3小时shell论坛,今天终于把精华帖子恳完了,放点好脚本给各位,学shell上cu,没事逛逛论坛,心情好的时候看看精华贴.进步那真是飞一般的感觉. 不过新手最好还是先潜水一个月,在开始发帖回帖.最近论坛帖子质量严重下降都是1+1=?. zj@zj:~/Script/cushell/08.11.04$ cat checkip.sh #!/bin/bash printerr () { echo "incorrect IP format." readip chkip } readip () { read -p "Your IP: " IP } chkip () { echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' && printerr [ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && printerr for i in ${IP//./ } ; do echo $i | grep -Eq "^0+[^0]" && printerr [ $((10#$i/8)) -gt 31 ] && printerr done } if [ "$1" ]; then IP=$1 else readip fi chkip echo "$IP is good!" 解释下: grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' [^0-9.]是不是有除了0-9与.之外的字符 ^\.|\.$ 以.开头 or 以.结尾 ^0*\.|\.\. 以0开头 or 连续两个. 以上三种情况都是错误的哦,所以就printerr echo -e "${IP//./\n}" | wc -l说实话前面那种替换我也是first time.就是讲.替换为换行,3个点就是4行了哦.不是3个点也就printerr $((10#$i/8)) -gt 31 这个就是判断是不是<=255的了,当然你也可以自己修改成$i -gt 255 OK解释完毕^_^ zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 1.2.3.4 1.2.3.4 is zj@zj:~/Script/cushell/08.11.04$ ./checkip.sh 01.2.3.4 incorrect IP format. Your IP: a.b.a.d incorrect IP format. Your IP: 266.1.1.1 incorrect IP format. Your IP: 244.255.255.255 244.255.255.255 is 来自:http://blog.chinaunix.net/uid-9950859-id-98351.html 更复杂的且更精确的判断:http://www.shangxueba.com/jingyan/1898546.html Generated by Jackxiang's Bo-blog 2.1.1 Release