LINUX.ORG.RU

Использование регулярных выражений в case

 ,


0

2

Добрый день! Есть регулярноее выражение используемое в конструкции

if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
.......
fi

Подскажите пожалуйста как правильно запихнуть выражение в case, что бы было как то так:

case $ip in
 [[ $ip =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]])

.............................

;;
esac


Ответ на: комментарий от TeopeTuK

bash не поддерживает регулярные выражения в ветках case.

Тем более, что сделать на регулярных выражениях проверку чисел на < 256, или уж тем более на валидность маски — замучаешься. А стоит начать действительно выполнять условия задачи программируя, то вдруг окажется, что там регулярные выражения только тормозят всё и нафиг не нужны и без них всё просто как 5 копеек.

vodz ★★★★★
()
Ответ на: комментарий от vodz

сделать на регулярных выражениях проверку чисел на < 256

RX_OCTET='25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d'
RX_IPV4A="\\b(${RX_OCTET})\\.(${RX_OCTET})\\.(${RX_OCTET})\\.(${RX_OCTET})\\b"

Но сильно этим увлекаться не стоит, да. А с IPv6 будет задница.

anonymous
()
Ответ на: комментарий от anonymous

Ну да, не невозможно, а вот так — именно в лоб, с всё возрастающим ужасом для дополнительных проверок, типа 0.0.0.0 или 255.255.255.255 - можно, но 0.1.2.3 или 255.1.2.3 — явно ошибка ибо неюзабельно. А уж для масок и вовсе не стоит так извращаться.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.