2

Linux Bash でスクリプトに取り組んでおり、さまざまな種類のオプションを使用できます。基本的に、プログラムは指定された IP アドレスに ping を実行します。

ここで、ユーザーが端末に IP アドレスの範囲を書き込めるようにしたいと考えています。これにより、プログラムが ping を実行します。

Fe: bash pingscript 25 - 125

スクリプトは、192.168.1.25 から 192.168.1.125 までのすべてのアドレスに対して ping を実行します。

それは難しいことではありません。ちょっとしたケースを書く必要があるだけです

[0-9]-[0-9] ) ping (rest of code)

問題は次のとおりです。このコードでは、fe の数だけ ping を実行できます。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)

などなど… 可能性はたくさんあります。書き方は他にもあると思いますが、いかがでしょうか?

引数に文字を入れたくないのですが、それから始めることはできません (ループスルー システム)。

4

2 に答える 2

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

最初の引数は開始位置の番号で、2 番目の引数は終了位置です。次のようにスクリプトを呼び出します。

./script 25 125

pingオプション:

  • -q: その ping は要約を出力しません
  • -n: DNS ルックアップなし
  • -c1: 1パッケージのみ発送
  • -W1: 1 秒までのタイムアウト (もちろん増やすことができます)
于 2015-05-26T12:27:32.440 に答える
2

extglobシェル オプションを有効にすると、スクリプトで拡張パターン マッチングを使用できます。

shopt -s extglob

したがって、次の+ような量指定子でブレースを使用できます。

#!/bin/bash

shopt -s extglob

case $1 in
+([0-9])-+([0-9]) )
    # do stuff
    ;;
esac
于 2015-05-26T12:38:09.310 に答える