작업중 인 스크립트의 일부로 입력 된 IP 주소가 올바른 형식인지 확인하고 싶습니다. 입력 형식이 올바르지 않은 동안 루프를 만들고 싶습니다. 다음은 형식이 올바른 루프에서 작동합니다.
while [[ $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]
do
형식이 맞지 않는다고 말하기 위해 어떻게 이것을 바꿀 수 있습니까? 나는 효과가 있기를 바랐 !=~
지만 구문 오류가 발생했습니다.
답변
해결책은 매우 간단합니다. 모두 재미있을 것입니다.
부정 구문 세부 사항에 대해 작업 할 필요가 없습니다 . until
대신을 사용하십시오 while
.
답변
문자열을 비교하려면을 !=
대신 사용해야 합니다 !=~
.
에서 man bash
string1 != string2 True if the strings are not equal.
오른쪽에 정규 표현식을 사용함에 따라 실제로 필요합니다 =~
. 전체 표현을 부정하도록 선택할 수 있습니다.
while [[ !( $range =~ ^[0-9]{1,3]}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ) ]]
예:
$ bash --version | head -n1
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
$ cat script
range='1'; while [[ !( $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ) ]]; do echo "$range NOT OK"; range+='.2'; sleep 1; done
echo "Finished"
$ bash script
1 NOT OK
1.2 NOT OK
1.2.2 NOT OK
Finished
$