如何简化匹配IP地址的if-else语句

问题描述 投票:0回答:3

我有以下If-Else语句,我想简化。

if [[ "$IP" == 192.* ]] || [[ "$IPAddr" == 193.* ]]
then
    data="correct data set"
fi 

我需要包含更多的[[ "$IP" == 192.* ]],并希望看看是否有更好的方法来做同样的事情,而不是使用太多的||语句

linux bash shell sh rhel
3个回答
5
投票

你可以使用case更轻松地完成它。

case "$IP" in 
    192.* | 193.*) data="correct data set";;
esac

您可以添加由|分隔的更多模式。

此外,您可以使用像19[23].*这样的模式来匹配两个字符串。


2
投票

由于这是一个glob匹配,你可以使用一个字符范围:

# 192.0.0.0 or 193.0.0.0
if [[  "$IP" == 19[23].* ]]
then echo "match"; fi

或者是一个extglob交替:

# 192.0.0.0 or 10.0.0.0
if [[  "$IP" == @(192|10).* ]]
then echo "match"; fi

0
投票

你似乎特意试图匹配多个变量($IP$IPAddr)。

如果你的意思是$IP两种情况,那么给出的解决方案是好的。

否则,每个测试都是一组独特的A和B比较,所以||的列表可能仍然是你最好的选择。您可以跨行格式化它们,以实现可维护性和可读性,但......

if [[ "$IP"     == 192.* ]] || 
   [[ "$IPAddr" == 193.* ]]
then data="correct data set"
fi 

&&||建立了跨越线的背景。

© www.soinside.com 2019 - 2024. All rights reserved.