2013-05-20 68 views
1

我想從基於我設置的IP範圍的文件中刪除多個IP條目。從變量生成IP

防爆文件:

15.12.168.192 13.13.168.192 23.12.168.192 23.15.168.192 等等

我想僅設置範圍區域,下面的腳本。

#!/bin/bash 

# RANGE 
START=192.168.12 
END=192.168.13 


##collecting the last two digit from START and END 
first=`echo $START | sed 's/^.*\(.\{2\}\)$/\1/'` 
last=`echo $END | sed 's/^.*\(.\{2\}\)$/\1/'` 

## echo both 
echo $first 
echo $last 

for ip in 192.168.1.{$first..$last}; do 
echo "$ip" 

## conversion of the IPs. 
echo $ip | sed -e '/\n/!G;s/\([^.]*\)\.\(.*\n\)/&\2.\1/;//D;s/\n//' 
done 

即使仍然有對文件(grep -v)的最後一步 - 我已經停留在這個階段;我知道,這是一個推測語法....

這是該行:

for ip in 192.168.1.{$first..$last}; do 
echo "$ip" 

這是利用$first$last產生,讓我煩惱,每個IP地址。

+0

'first'可以更簡單地用'first = $ {START ## *。}來設置。類似於'last'。 – chepner

+1

反轉八位字節的更可讀方式是「IFS =」。閱讀b c d <<<「$ ip」;回聲「$ d。$ c。$ b。$ a」'。 – chepner

回答

1

{12..45}只適用於文字,不能使用變量。如果只有一對大括號,但不需要擴展:

for fourth in $(seq $first $last) ; do 
    echo 192.168.1.$fourth 
done 
+0

謝謝:)這就像一個迷人的工作!你是男人! – user2335924

+1

原因是shell在參數擴展之前確實需要擴展*:http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions –

+2

沒有調用'seq',你可以用for((i = $ first; i <= $ last; i ++))來做一個類似C的for循環: ...' –