
Есть ли способ реализовать что-то подобное в скрипте 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
Если вы хотите просто отслеживать каждый элемент (например, запустить 3 раза, запустив первый ip с первым сервером, второй со вторым и т. д.), вы можете использовать итератор и вызвать индекс массива вручную. Но это означает, что нам также нужно будет сначала преобразовать строки в массивы:
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