BASE语句中的BASH多个变量

时间:2019-02-18 09:53:19

标签: bash if-statement case

我有2个独立的案例陈述

一个用于AZURE cidr块

 net_prefix=${VNET_CIDR_BLOCK#*/}

    case "$net_prefix" in

    0) azure_wildcard_mask=255.255.255.255
     ;;

    esac

和第二个AWS Cidr

aws_net_prefix=${AWS_VPC_CIDR_BLOCK#*/}

case "$aws_net_prefix" in

0) aws_wildcard_mask=255.255.255.255
 ;;
  esac

是否有可能以某种方式将2个以上的CASE合并为一个。例如

 A=$1

    B=$2

    net_prefix=${A#*/}

    aws_prefix=${B#*/}

    case "$net_prefix" OR "$aws_prefix" in

    0) aws_wildcard_mask=255.255.255.255
       azure_wildcard_mask=255.255.255.255
     ;;

我需要aws_wildcard和azure_wildcard_mask变量

我尝试过这个

if [ "$azure_prefix" == "19" ] || [ "$aws_prefix" == "19" ]

then
  azure_wildcard="255.255.255.255"
  aws_wildcard="255.255.255.255"

elif [ "$azure_prefix" == "20" ] || [ "$aws_prefix" == "20" ]

then
  azure_wildcard="127.255.255.255"
  aws_wildcard="127.255.255.255"
fi

echo $azure_wildcard
echo $aws_wildcard

并执行它:

./2.sh 10.10.0.0/19 20.20.20.0/20

获得相同的输出

  

255.255.255.255

     

255.255.255.255

2 个答案:

答案 0 :(得分:0)

case之后的字符串可以是任意表达式。也许像这样吗?

case $aws_prefix::$net_prefix in
    0::* | *::0 )
        aws_wildcard_mask=255.255.255.255
        azure_wildcard_mask=255.255.255.255 ;;
esac

答案 1 :(得分:0)

将案例抽象为一个函数

A=$1
B=$2

getmask(){
    case "$1" in
        19) echo 255.255.255.255 ;;
        20) echo 127.255.255.255 ;;
    esac
}

azure_wildcard_mask=$(getmask ${A#*/})
aws_wildcard_mask=$(getmask ${B#*/})