在我正在处理的脚本的一部分中,我想验证输入的 IP 地址的格式是否正确。我想在输入格式不正确时进行循环。当格式正确时,以下内容适用于循环。
while [[ $range =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} ]]
do
Run Code Online (Sandbox Code Playgroud)
我怎么能把这个转过来说不符合格式。我希望!=~
能奏效,但出现语法错误。
对于字符串的比较,应该使用!=
而不是!=~
.
从 man bash
Run Code Online (Sandbox Code Playgroud)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} ) ]]
Run Code Online (Sandbox Code Playgroud)
例子:
$ 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
$
Run Code Online (Sandbox Code Playgroud)