linux中shell检查字符串是不是有效ip

例子

 代码如下 复制代码

zj@zj:~/Script/cushell/08.11.04$ cat checkip.sh
view plainprint?
#!/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

例子2、使用shell校验IP地址合法性

使用方法:

 代码如下 复制代码

[root@yang python]# bash check_ip.sh IP地址

执行结果:返回值0校验合法,非0不合法。

shell代码:

 代码如下 复制代码

[root@yang python]# vi check_ip.sh
#!/usr/bin/sh
CheckIPAddr()
{
echo $1|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$" > /dev/null;
#IP地址必须为全数字
        if [ $? -ne 0 ]
        then
                return 1
        fi
        ipaddr=$1
        a=`echo $ipaddr|awk -F . '{print $1}'`  #以"."分隔,取出每个列的值
        b=`echo $ipaddr|awk -F . '{print $2}'`
        c=`echo $ipaddr|awk -F . '{print $3}'`
        d=`echo $ipaddr|awk -F . '{print $4}'`
        for num in $a $b $c $d
        do
                if [ $num -gt 255 ] || [ $num -lt 0 ]    #每个数值必须在0-255之间
                then
                        return 1
                fi
        done
                return 0
}
if [ $# -ne 1 ];then            #判断传参数量
        echo "Usage: $0 ipaddress."
        exit
else
CheckIPAddr $1
fi

时间: 2024-10-12 23:55:19

linux中shell检查字符串是不是有效ip的相关文章

linux中shell截取字符串方法总结

shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ${parameter:+word} 上面4种可以用来进行缺省值的替换. ${#parameter} 上面这种可以获得字符串的长度. ${parameter%word} 最小限度从后面截取word ${parameter%%word} 最大限度从后面截取word ${parameter#word}

应用-Linux中shell脚本问题

问题描述 Linux中shell脚本问题 ]我有shell脚本,放在/bin/目录下,内容如下: #!/bin/sh cd /usr /sbin/insmod s3c_ts.ko ./digitpic ./MSYH.TTF & 当我开发板上电以后我手动执行手动执行test.sh 我的digitpic应用程序能够正常启动 当我在/etc/init.d/rcS 文本里面最后添加exec test.sh 提示说这个触摸屏读取错误,也就是/sbin/insmod s3c_ts.ko这部分错误了,就只有触

linux中shell变量$#,$@,$0,$1,$2的含义解释

比如脚本名称叫start.sh 输入参数三个: 1 2 3 运行test.sh 1 2 3后 $*为"1 2 3"(一起被引号包住) $@为"1" "2" "3"(分别被包住) $#为3(参数数量) linux中shell变量$#,$@,$0,$1,$2的含义解释:  变量说明:  $$  Shell本身的PID(ProcessID)  $!  Shell最后运行的后台Process的PID  $?  最后运行的命令的结束代码

linux中SHELL脚本中的数组用法

在Shell中(我这里是Bash),其实没有传统意义上的"数据类型",把任何变量中存的值都是作为字符组成的"字符串".当然,通过declare可以声明某个变量是整型.数组等类型.其中,数组就是本文要专门讲的了.在Bash中,仅支持一维数组,当然通过关联数组(associative array)的形式可以模拟多维数组. 1. 数组的声明 用 declare -a array 声明array是一个数组,用declare -A a_array 声明a_array是一个关联

JAVA中如何将字符串表示的ip地址转换为long表示

01./** 02. * 将字符串表示的ip地址转换为long表示. 03. * 04. * @param ip ip地址 05. * @return 以32位整数表示的ip地址 06. */ 07.public static final long ip2Long(final String ip) { 08. if (!RegexpUtils.isExactlyMatches("(\\d{1,3}\\.){3}\\d{1,3}", ip)) { 09. throw new Illega

linux中shell脚本实现下载完关机_linux shell

用mint 有一段时间了,下载基本用firefox,有时下载几个G的游戏.可是firefox没有找到下载完关机的选择.处于这个原因,写了这个. download_shutdown.sh #!/bin/bash # Created By: Demo <demo@demo.com> # Created Time: 2015-01-30 12:36:44 # Modified Time: 2015-01-30 12:54:21 dir=$1 while [ "1" ] do if

linux中Shell分析Nginx日志 找出被阻止的IP

在日常运维中会发现流量突增现象或者服务器负载升高等现象,为找到原因,需要使用nginx limit模块 对访问的Ip进行限制,然后可以分析日志. 配置nginx限制IP访问,可配置多个zone. limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s; 对产生的nginx日志进行分析 脚本. ##提供默认日志路径和名称 logsFile="日志名称" ##配置多个zoneName zoneName="alli

linux中shell命令test用法和举例

test 命令期望在命令行中找到一个参数,当 shell 没有为变量赋值时,则将该变量视为空.这意味着在处理脚本时,一旦脚本寻找的参数不存在,则 test 将报告该错误. 当试图保护脚本时,您可以通过将所有参数包含在双引号中来解决这个问题.然后 shell 将变量展开,如果变量没有值,那么将传递一个空值给 test.另一种方法是在脚本内增加一个额外检查过程来判断是否设置了命令行参数.如果没有设置命令行参数,那么脚本会告诉用户缺少参数,然后退出.我们会通过一些例子来更具体地说明所有这些内容. te

Linux中shell命令的用法和技巧

使用Linux shell是我每天的基本工作,但我经常会忘记一些有用的shell命令和l技巧.当然,命令我能记住,但我不敢说能记得如何用它执行某个特定任务.于是,我开始在一个文本文件里记录这些用法,并放在我的Dropbox里,现在,向大家分享这个文件.这个文件我会不断的更新.需要注意一点的是,有些用法需要在你的Linux系统里安装额外的软件. UPDATE: November 25, 2013 检查远程端口是否对bash开放: echo >/dev/tcp/8.8.8.8/53 &&