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

时间:2019-04-18 16:29:46

标签: linux bash shell sh rhel

我要简化以下If-Else语句。

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

我需要包含更多的[[ "$IP" == 192.* ]],并想看看是否有更好的方法来做到这一点,而不是使用太多的||语句

3 个答案:

答案 0 :(得分:5)

使用case可以更轻松地完成此操作。

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

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

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

答案 1 :(得分:2)

由于这是全局匹配,因此可以使用字符范围:

...
  transform(value: string, userProp?: any): any {
    let userData;
    this.userService.getUser(value).subscribe(res => {
      userData = res;
      if (!userProp) {
        return userData;
      } else {
        const prop = userProp === 'displayName' ? `${userData.firstName} ${userData.lastName}` : oneProjectUser(value)[userProp];
        return prop;
      }
    });
  }
...

或外来交替:

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

答案 2 :(得分:0)

您似乎正在专门尝试匹配多个变量($IP$IPAddr)。

如果在两种情况下均表示$IP,则给出的解决方案是很好的。

否则,每个测试都是A和B比较的不同集合,因此||的列表可能仍然是最好的选择。您可以 跨行格式化它们,以实现可维护性和可读性,但是...

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

&&||设置了跨行上下文。