2015-05-26 34 views
2

我正在使用不同種類的選項來使用Linux Bash中的腳本。 基本上,程序將ping到給定的ip地址。Bash腳本:選項 - 案例:多個號碼的範圍

現在,我想讓用戶在終端中編寫一系列ip-adresses,然後程序將ping它。

鐵:慶典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:平25 - 50)

但隨後有其另一邊和2 1號的可能性:[0-9]-[0-9][0-9] (fe: ping 1 - 25)

或:[0-9]-[0-9][0-9][0-9] (fe: ping 1 - 125)

等等...這意味着有是很多的可能性。 可能有另一種寫法,但如何?

我不希望任何字母在參數中,但我不能從那個(循環系統)開始。

回答

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:那平不打印摘要
  • -n:沒有DNS查找
  • -c1:僅發送1包
  • -W1:超時到1

    shopt -s extglob 
    

    所以,你可以使用大括號與+量詞這樣的:第二個通過啓用extglob外殼選項(可以五言的增加)

+0

您是否介意在第二段代碼中使用的選項/函數? 我真的不知道'-qnc1 -W1 $ i'和'$(seq -f(...)。%g'。 – Kryptonous

+0

@Kryptonous sry,我編輯了我的答案 – chaos

+0

謝謝,還有什麼'$(seq -f'是什麼意思?或者你有鏈接到它的解釋嗎?非常感謝,已經! – Kryptonous

2

您可以在腳本中使用擴展模式匹配

#!/bin/bash 

shopt -s extglob 

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

這個也可以用在bash中嗎?當我看到你使用'#!/ bin/sh'時, ? – Kryptonous

+1

@Kryptonous是的,它可以在bash中使用,這裏是文檔http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html 我已更正我的答案。 –

+0

我在bash上試了一下,確實有效,謝謝你的鏈接!這真的有幫助ing是我可以實現這兩種解決方案來實現所需的輸出。 – Kryptonous