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