簡體   English   中英

Bash腳本:選項-案例:多個數字的范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM