2016-05-02 10 views
1

ファイル名( "/")に不正な文字を含むCIDRをとるforループがあります。Bash forループ - 変数名を変更してください

コマンドの一部は、出力をCIDRの名前で保存することです。

for i in $(more subnets.lst);do shodan download $i-shodan net:$i;done 

download引数の後には、moreコマンドの結果(CIDR(192.168.21.0/24))が続きます。

ループ実行中に変数の名前を変更する方法はありますか? 私はstrの長さからバッチファイルを減算することでこの年をやっていることを覚えていますが、 "/"(または他の準拠の文字)を "/"に置き換えるだけでよいのではないでしょう。

+0

Shodanの "net"フィルタに複数のサブネットをカンマで区切って指定できます。たとえば、次のようにすることができます。 net:192.168.21.0/24,172.20.0.0/16,8.8.8.8 – achillean

答えて

7

:私は自分自身のためにそれを働い

$ echo $var 
192.168.21.0/24 

$ echo "${var//\//-}" 
192.168.21.0-24 

をだからあなたのコマンドで、必要な時にだけの元の値を変更せずに"${i//\//-}"を使用します。

while IFS= read -r line; do ....; done 
:のように、ではない catmoreや兄弟、ファイルから行を読み取るために whileループを使用し、サイドノートで

i="${i//\//-}" 

:あなたは、新しい値に変数iを設定したい場合

0

あなたはbashパラメータ展開を使用してこれを行うことができます

for i in $(more subnets-test);do shodan download $(echo $i | tr "/" "-") net:$i;done