Как упростить оператор if-else, соответствующий IP-адресу - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть следующее утверждение If-Else, которое я хочу упростить.

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

Мне нужно добавить больше [[ "$IP" == 192.* ]] и посмотреть, есть ли лучший способ сделать то же самое, чем использовать слишком много || операторов

Ответы [ 3 ]

5 голосов
/ 18 апреля 2019

Вы можете сделать это проще с case.

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

Вы можете добавить больше шаблонов, разделенных |.

Кроме того, вы можете использовать шаблон как 19[23].* чтобы соответствовать обеим строкам.

2 голосов
/ 18 апреля 2019

Поскольку это глобальное совпадение, вы можете использовать диапазон символов:

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

Или чередование внешнего блока:

# 192.0.0.0 or 10.0.0.0
if [[  "$IP" == @(192|10).* ]]
then echo "match"; fi
0 голосов
/ 19 апреля 2019

Вы, похоже, пытаетесь сопоставить несколько переменных ($IP, $IPAddr).

Если вы имеете в виду $IP в обоих случаях, то приведенные решения хороши.

В противном случае каждый тест представляет собой отдельный набор сравнений A и B, поэтому список из ||, вероятно, все еще будет вашей лучшей ставкой. Вы можете отформатировать их между строками для удобства и удобства чтения, хотя ...

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

&& и || устанавливают контекст строки.

...