Bash脚本:选项 - 案例:多个数字的范围

时间:2015-05-26 12:11:49

标签: linux bash case command-line-arguments optional-arguments

我正在使用Linux Bash中的脚本,使用不同类型的选项。 基本上,程序将ping到给定的ip-address。

现在,我想让用户在终端中编写一系列ip-adresses,然后程序会ping通。

Fe:bash pingscript 25 - 125

  然后,脚本将ping 192.168.1.25和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)

依此类推......这意味着有很多可能性。 可能有另一种方式来写它,但是怎么样?

我不希望任何字母出现在参数中,但我不能从那开始(循环系统)。

2 个答案:

答案 0 :(得分:3)

怎么样:

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秒(可以增加cource)

答案 1 :(得分:2)

您可以通过启用extglob shell选项在脚本中使用扩展模式匹配:

shopt -s extglob

因此,您可以使用带有+量词的大括号,如下所示:

#!/bin/bash

shopt -s extglob

case $1 in
+([0-9])-+([0-9]) )
    # do stuff
    ;;
esac