当前位置: 首页 > 面试题库 >

检查IP有效性

太叔英卫
2023-03-14
问题内容

如何检查shell脚本中IP地址的有效性,该范围0.0.0.0在to 的范围内255.255.255.255


问题答案:

如果您使用的是bash,则可以对模式进行简单的正则表达式匹配,而无需验证四边形:

#!/usr/bin/env bash

ip=1.2.3.4

if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  echo "success"
else
  echo "fail"
fi

如果您坚持使用POSIX Shell,则可以使用exprBRE而不是ERE来做基本相同的事情:

#!/bin/sh

ip=1.2.3.4

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  echo "success"
else
  echo "fail"
fi

请注意,expr假设您的正则表达式锚定在字符串的左侧,因此^不需要缩写。

如果确认每个四边形小于256很重要,那么显然您将需要更多代码:

#!/bin/sh

ip=${1:-1.2.3.4}

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  for i in 1 2 3 4; do
    if [ $(echo "$ip" | cut -d. -f$i) -gt 255 ]; then
      echo "fail ($ip)"
      exit 1
    fi
  done
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

甚至更少的管道:

#!/bin/sh

ip=${1:-1.2.3.4}

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  IFS=.
  set $ip
  for quad in 1 2 3 4; do
    if eval [ \$$quad -gt 255 ]; then
      echo "fail ($ip)"
      exit 1
    fi
  done
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

再或者,如果您的shell是bash,那么您可以在不喜欢算术的情况下使用繁琐的正则表达式进行四边形验证:

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

re='^(0*(1?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))\.){3}'
 re+='0*(1?[0-9]{1,2}|2([‌​0-4][0-9]|5[0-5]))$'

if [[ $ip =~ $re ]]; then
  echo "success"
else
  echo "fail"
fi

这也可以用BRE表示,但这比我的手指输入要多。

最后,如果您喜欢将此功能…放入功能中的想法:

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

ipvalid() {
  # Set up local variables
  local ip=${1:-1.2.3.4}
  local IFS=.; local -a a=($ip)
  # Start with a regex format test
  [[ $ip =~ ^[0-9]+(\.[0-9]+){3}$ ]] || return 1
  # Test values of quads
  local quad
  for quad in {0..3}; do
    [[ "${a[$quad]}" -gt 255 ]] && return 1
  done
  return 0
}

if ipvalid "$ip"; then
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

您可以通过多种方式执行此操作。我只给你看了几个。



 类似资料:
  • 本文向大家介绍php代码检查代理ip的有效性,包括了php代码检查代理ip的有效性的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了检查代理ip有效性php代码,稳定性,如错误率和查询用时 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我正在用Golang开发网络应用程序。我有一个IP地址。每当出现请求时,我都会使用它来查找返回IP地址的主机IP地址。比较这些的最佳方法是什么? 顺便说一下,在Python中,我们有一个数据结构,使得上述问题很容易解决,但是Go呢? 问题答案: 带“套” 建立我们的集合 Go中没有内置类型,但是您可以优雅地使用a 作为集合,例如: 注意:我们利用了以下事实:如果键不在映射中,则对映射建

  • 问题内容: 我很好奇,用Java 创建对象的最明显的方法已被弃用,并且似乎已被使用宽大日历的不太明显的方法“替代”。 如何检查以日,月和年的组合形式给出的日期是否为有效日期? 例如,2008-02-31(如yyyy-mm-dd)将是无效日期。 问题答案: 当前的方法是使用日历类。它具有setLenient方法,该方法将验证日期和引发异常,如果超出示例,则抛出异常。 忘记添加:如果您获得日历实例并使

  • 让我们得到一个m位消息,其中最后n位是CRC位。据我所知,为了检查接收是否正确,我们应该用特定CRC算法的多项式对所有m位进行异或。如果结果是全零,我们可以说没有错误。

  • 以下是场景: 我有一个日期和一个不同的日期格式。示例: 日期:2016-10-19 日期格式:“DD-MM-YYYY”。 我需要检查这个日期是否有效。 我尝试过跟踪事情 d.isValid()每次返回false。Moment.js解析给定格式的日期吗? 然后我尝试先在中格式化日期,然后将其传递给矩。js: 现在<代码>日期。isValid()给了我想要的结果,但现在是时候了。js日期对象创建两次。

  • 启动Tomcat, 应该能看到类似的log信息 2015-04-14 22:33:19,945 net.wendal.nutzbook.quartz.NutQuartzCronJobFactory.init(NutQuartzCronJobFactory.java:33) DEBUG - job define name=CleanNonActiveUserJob cron=0 0/2 * * *