2012-03-15 65 views
13

我有一個的config.txt文件,IP地址,這樣bash腳本使用剪切命令的變量,結果存儲在另一個變量

10.10.10.1:80 
10.10.10.13:8080 
10.10.10.11:443 
10.10.10.12:80 

我想平在每個IP地址內容文件

#!/bin/bash 
file=config.txt 

for line in `cat $file` 
do 
    ##this line is not correct, should strip :port and store to ip var 
    ip=$line|cut -d\: -f1 
    ping $ip 
done 

我是一個初學者,對於這樣的問題抱歉,但我找不到自己。

+0

'for cat in cat file'將會運行兩次......一次用'line = cat'和一次用'line = file'。我不認爲這就是你想要的。 – FatalError 2012-03-15 18:44:17

回答

30

awk的解決方案是我會用什麼樣的一個片段可能會更好,但如果你想用bash瞭解你的問題,這裏是你的腳本的修訂版本。

##config file with ip addresses like 10.10.10.1:80 
#!/bin/bash -vx 
file=config.txt 

while read line ; do 
    ##this line is not correct, should strip :port and store to ip var 
    ip=$(echo "$line" |cut -d\: -f1) 
    ping $ip 
done < ${file} 

你可以寫你的頂線

for line in $(cat $file) ; do ... 

您需要的命令替換$(...)獲取某個文件

讀線分配到$ IP值通常被認爲與更高效while read line ... done < ${file}模式。

我希望這會有所幫助。

+0

+ 1效率更高,但更安全:'for $( 2012-03-15 18:54:07

+0

@yourmother,請注意在這裏使用變量的引號:對於保護值中的空白至關重要。 – 2012-03-15 18:55:47

+2

注意ip可以用'ip = $ {line %%:*}'提取,而不必調用echo | cut。 – 2012-03-15 18:56:37

4

可以避開環路,並通過使用切等:

awk -F ':' '{system("ping " $1);}' config.txt 

但是,如果您發佈的config.txt

相關問題