Для синтаксиса сценария bash

3

Есть ли способ реализовать такую ​​вещь в сценарии 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

Спасибо.

    
задан Uvais Ibrahim 25.10.2014 в 09:02
источник

2 ответа

5

Если вы хотите, чтобы это было гнездо, поэтому каждый сервер работает против каждого 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
    
ответ дан Oli 25.10.2014 в 09:27
источник
0

Чтобы использовать синтаксис (ну, почти), который вы пытались, вам придется преобразовать ваши строки в массивы:

$ 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 
    
ответ дан terdon 25.10.2014 в 13:54