Bash 脚本:选项 - 大小写:多个数字的范围
Bash Script: options - case: range of multiple numbers
我正在 Linux Bash 中编写脚本,其中包含不同种类的选项。
基本上,该程序将 ping 到给定的 ip 地址。
现在,我想让用户在终端中写入一系列 ip 地址,然后程序将 ping。
铁:bash pingscript 25 - 125
the script will then ping all the addresses between 192.168.1.25 and 192.168.1.125.
不难,写个小案例就可以了
[0-9]-[0-9] ) ping (rest of code)
现在的问题是:这段代码 只能让我 ping fe 号码。 0 - 9 而不是 10 - 25.
为此我需要写:
[0-9][0-9]-[0-9][0-9](fe: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" ); 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 in
+([0-9])-+([0-9]) )
# do stuff
;;
esac
我正在 Linux Bash 中编写脚本,其中包含不同种类的选项。 基本上,该程序将 ping 到给定的 ip 地址。
现在,我想让用户在终端中写入一系列 ip 地址,然后程序将 ping。
铁:bash pingscript 25 - 125
the script will then ping all the addresses between 192.168.1.25 and 192.168.1.125.
不难,写个小案例就可以了
[0-9]-[0-9] ) ping (rest of code)
现在的问题是:这段代码 只能让我 ping fe 号码。 0 - 9 而不是 10 - 25.
为此我需要写: [0-9][0-9]-[0-9][0-9](fe: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" ); 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 in
+([0-9])-+([0-9]) )
# do stuff
;;
esac