[英]Bash Script: options - case: range of multiple numbers
我正在使用各种不同的选项在Linux Bash中编写脚本。 基本上,程序将ping到给定的ip地址。
现在,我希望使用户能够在终端中编写一系列ip地址,然后程序将对其进行ping操作。
铁:bash pingscript 25-125
然后脚本将对192.168.1.25和192.168.1.125之间的所有地址执行ping操作。
这并不难,我只需要用
[0-9]-[0-9] ) ping (rest of code)
现在的问题是:这段代码只能让我ping fe。 0-9,而不是10-25 。
为此,我需要写:[0-9] [0-9]-[0-9] [0-9](例如:ping 25-50)
但是,有可能一侧有1个数字,另一侧有2个数字: [0-9]-[0-9][0-9] (fe: ping 1 - 25)
或: [0-9]-[0-9][0-9][0-9] (fe: ping 1 - 125)
等等...这意味着存在很多可能性。 可能还有另一种编写方式,但是怎么写呢?
我不希望在参数中包含任何字母,但是我不能以此开头(循环系统)。
那个怎么样:
for i in 192.168.1.{25..125}; do ping -qnc1 $i; done
或在以变量为参数的脚本中:
for i in $(seq -f "192.168.1.%g" $1 $2); do ping -qnc1 -W1 $i; done
第一个参数是从哪里开始的数字,第二个参数是从哪里结束的数字。 像这样调用脚本:
./script 25 125
ping
选项:
-q
:ping不打印摘要 -n
:无dns查找 -c1
:仅发送1个包裹 -W1
:超时到1秒(可以增加次数) 您可以通过启用extglob
shell选项在脚本中使用扩展模式匹配:
shopt -s extglob
因此,可以将括号与+
量词一起使用,如下所示:
#!/bin/bash
shopt -s extglob
case $1 in
+([0-9])-+([0-9]) )
# do stuff
;;
esac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.