W części skryptu, nad którym pracuję, chcę sprawdzić, czy wprowadzony adres IP ma poprawny format. Chcę zrobić pętlę, gdy format wejściowy NIE jest poprawny. Poniższe działa dla pętli, gdy format jest poprawny.
while [[ $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]
do
Jak mogę to odwrócić, żeby powiedzieć, że NIE pasuje do formatu. Miałem nadzieję, !=~
że zadziała, ale dostaję błąd składniowy.
Odpowiedzi:
Rozwiązanie jest takie proste, jestem pewien, że wszystkim się spodoba.
Nie musisz się zastanawiać nad szczegółami składni negacji, po prostu użyj
until
zamiastwhile
.źródło
Do porównania łańcucha należy użyć
!=
zamiast!=~
.Z
man bash
Ponieważ używasz wyrażenia regularnego po prawej stronie, naprawdę potrzebujesz
=~
. Możesz zdecydować o zanegowaniu całego wyrażenia.Przykład:
źródło
bash
4.2.42. pastebin.com/0vHh5MMB