
Gibt es eine Möglichkeit, so etwas in einem Bash-Skript zu implementieren?
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
Danke.
Antwort1
Wenn Sie dies verschachteln möchten, sodass jeder Server für jede IP ausgeführt wird (d. h. 9 Mal ausgeführt wird), können Sie:
for ip in $pureips; do
for server in $pureservers; do
echo "$server | $ip "
done
done
Wenn Sie nur jedes Element verfolgen möchten (z. B. dreimal ausführen, die erste IP mit dem ersten Server ausführen, die zweite mit dem zweiten usw.), können Sie einen Iterator verwenden und den Index des Arrays manuell aufrufen. Das bedeutet jedoch, dass wir die Zeichenfolgen zuerst in Arrays konvertieren müssen:
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
Antwort2
Um die von Ihnen versuchte Syntax (naja, fast) zu verwenden, müssten Sie Ihre Zeichenfolgen in Arrays konvertieren:
$ 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