2017-05-16 7 views
1

にループで1から200までの範囲で変数を使用する方法:この場合私はいくつかのレコードを取得するためのスクリプトはbash持っ

#!/bin/bash 

host_start=test 
domain=test.com 

for host in "${host_start}"{1..200}."$domain"; 
do 
    address=`dig +short $host` 
    echo "$address = $host" 
done 

を、すべてがOKです。私が持っている:

192.168.1.1 = test1.test.com 
192.168.1.2 = test2.test.com 
192.168.1.3 = test3.test.com 
... 
... 
... 
etc ... 

しかし、その代わりにリテラル{1..200}のを、私は私のスクリプトの先頭で変数を使用します。私はこれでした:私のエラーが

dig: 'test{1..200}.test.com' is not a legal name (empty label) 

です:この場合

t1=1 
t2=200 
for host in "${host_start}"{$t1..$t2}."$domain"; 
do 
... 

を、私はエラーを取得しますか?どうすれば修正できますか?

+0

@chepnerを。 –

答えて

2

変数拡張の前にブレース拡張が行われるため、変数には使用できません。ループまたはseqコマンドを使用します。

for ((i=t1; i<=t2; i++)) ; do 
    host=$host_start$i.$domain 

または

for i in $(seq $t1 $t2) ; do 
    host=$host_start$i.$domain 
+0

@MadPhysicist: 'seq'は非標準のユーティリティですので、厳密なPOSIX準拠が必須の場合は避けるべきです。しかしながら、それは広く利用可能であり、広く使用されており、有用な機能を提供し続けている。 – mklement0

+0

十分に公正。コメントは取り消されました。 –

2

あなたは、おそらく実行する必要があります。あなたもその1をハンマーしたい場合、私は、私のデュープのデュープとして1あなたのデュープをマーク

for ((i=t1; i <= t2; i++)); do 
    host="${host_start}"$i."$domain" 
    ... 
done 
関連する問題