加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何使用bash返回码的条件?

发布时间:2020-12-15 18:38:24 所属栏目:安全 来源:网络整理
导读:我有一小段代码检查IP地址的有效性: function valid_ip(){ local ip=$1 local stat=1 if [[ $ip =~ ^[0-9]{1,3}.[0-9]{1,3}$]]; then OIFS=$IFS IFS='.' ip=($ip) IFS=$OIFS if [[ ${ip[0]} -le 255 ${ip[1]} -le 255 ${ip[2]} -le 255 ${ip[3]} -le 255
我有一小段代码检查IP地址的有效性:
function valid_ip()
{
    local  ip=$1
    local  stat=1

    if [[ $ip =~ ^[0-9]{1,3}.[0-9]{1,3}$]]; then
        OIFS=$IFS
        IFS='.'
        ip=($ip)
        IFS=$OIFS
        if [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 
            && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]; then
            stat=1
        else
            stat=0
        fi
    fi
    return $stat
}

但是我在使用bash条件时遇到问题.我尝试了许多技术来测试其返回值,但是大多数技术在我身上失败了.

if [[ !$(valid_ip $IP) ]]; then

if [[ $(valid_ip IP) -eq 1 ]]; then

任何人都可以建议我该怎么办?

编辑

按照你的建议,我使用了以下的东西:

if valid_ip "$IP" ; then
      ... do stuff
  else
      perr "IP: "$IP" is not a valid IP address"
  fi

我收到错误

IP: “10.9.205.228” is not a valid IP address

返回代码在特殊参数$?命令退出后.通常,您只需要在运行另一个命令之前保存其值即可使用它:
valid_ip "$IP1"
status1=$?
valid_ip "$IP2"
if [ $status1 -eq 0 ] || [ $? -eq 0 ]; then

或者如果需要区分各种非零状态:

valid_ip "$IP"
case $? in
    1) echo valid_IP failed because of foo ;;
    2) echo valid_IP failed because of bar ;;
    0) echo Success ;;
esac

否则,让各种操作符隐含地检查:

if valid_ip "$IP"; then
    echo "OK"
fi

valid_IP "$IP" && echo "OK"

这是一个简单,惯用的写作valid_ip的方式:

valid_ip () {
    local ip=$1
    [[ $ip =~ ^[0-9]{1,3}$]] && {
        IFS='.' read a b c d <<< "$ip"
        (( a < 255 && b < 255 && c < 255 && d << 255 ))
    }
}

有两个表达式,[[…]]和{…};两人加入了&&如果第一个失败,那么valid_ip将失败.如果它很容易,那么第二个表达式(复合语句)被评估.读取将字符串分成四个变量,每个变量在算术表达式中单独测试.如果都是真的,那么((…))成功,这意味着&&列表成功,这意味着valid_ip成功.不需要存储或返回显式的返回码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读