forループ構文bashスクリプト

forループ構文bashスクリプト

このようなものを bash スクリプトで実装する方法はありますか?

pureips="10.3.1.111 10.3.1.112 10.3.1.114";
pureservers="a b c";
for ip,server in $pureips,$pureservers; do
    echo "$server | $ip ";
done

ありがとう。

答え1

これをネストして各サーバーが各 IP に対して実行されるようにしたい場合 (つまり、9 回実行する場合)、次の操作を実行できます。

for ip in $pureips; do
    for server in $pureservers; do
        echo "$server | $ip "
    done
done

各項目を追跡したいだけの場合 (たとえば、最初の IP を最初のサーバーで実行し、2 番目の IP を 2 番目のサーバーで実行するなど、3 回実行する場合)、反復子を使用して配列のインデックスを手動で呼び出すことができます。ただし、そのためには、まず文字列を配列に変換する必要があります。

read -a pureips <<< "10.3.1.111 10.3.1.112 10.3.1.114"
read -a pureservers <<< "a b c"

for ((i=0; i<=${#pureips[@]}; i++)); do
    echo "${pureservers[i]} | ${pureips[i]}"
done

答え2

試みていた構文 (ほぼ) を使用するには、文字列を配列に変換する必要があります。

$ pureips=(10.3.1.111 10.3.1.112 10.3.1.114)
$ pureservers=(a b c)
$ for server in ${pureservers[@]}; do 
    for ip in ${pureips[@]}; do  
        echo "$server | $ip "; 
    done 
done
a | 10.3.1.111 
a | 10.3.1.112 
a | 10.3.1.114 
b | 10.3.1.111 
b | 10.3.1.112 
b | 10.3.1.114 
c | 10.3.1.111 
c | 10.3.1.112 
c | 10.3.1.114 

関連情報