bash, for, использование "внешних" переменных внутри тела цикла

Добрый день.
Что то я завтыкал )

надо попинговать определенные хосты

S1=192.168.1.200
S2=192.168.10.1
S3=192.168.100.200

for i in {1..3}; do ping $S`echo $i`; done

bash -x скрипт
дает мне ping 1 ping 2 и ping 3
Как передать значение переменных S1 S2 S3 внутрь цикла?
TEMP=('ya.ru' 'google.com')
for I in ${TEMP}
do
ping ${I} -c 2
done
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Запускать скрипт через bash -x не нужно, достаточно прописать в начале указатель на баш, и сделать скрипт исполняемым командой chmod 755 скрипт
После этого можно запускать просто ./скрипт
А если положите его в один из путей, указанных в PATH, то просто скрипт

Если в именах хостов нет пробелов и прочих спецсимволов, а насколько я помню, их там быть не должно, можно сделать так:
#!/bin/bash
HOSTS="ya.ru google.com 8.8.8.8"
for i in $HOSTS ; do
 ping -c2 -w2 $i
done
Ключ -w2 нужен, чтобы ping не ждал ответа больше двух секунд, если хост "лежит".

Если список хостов не вводится снаружи и нигде кроме цикла не используется, можно перенести его прямо в цикл:
#!/bin/bash
for i in ya.ru google.com 8.8.8.8 ; do
 ping -c2 -w2 $i
done
к сожалению нет

[[email protected] ~]$ bash -x work/scripts/ping
+ TEMP=('ya.ru' 'google.com')
+ for I in '${TEMP}'
+ ping ya.ru -c 2
PING ya.ru (213.180.204.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=1 ttl=51 time=14.1 ms
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=2 ttl=51 time=13.5 ms
--- ya.ru ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 13.501/13.848/14.195/0.347 ms
Чего нет?
не подставляет второй хост

Опс. не видел предыдущий пост, сейчас почитаю )
Natrio
Запускать скрипт через bash -x не нужно, достаточно прописать в начале указатель на баш, и сделать скрипт исполняемым командой chmod 755 скрипт
После этого можно запускать просто ./скрипт
А если положите его в один из путей, указанных в PATH, то просто скрипт

Если в именах хостов нет пробелов и прочих спецсимволов, а насколько я помню, их там быть не должно, можно сделать так:
#!/bin/bash
HOSTS="ya.ru google.com 8.8.8.8"
for i in $HOSTS ; do
 ping -c2 -w2 $i
done
Ключ -w2 нужен, чтобы ping не ждал ответа больше двух секунд, если хост "лежит".

Если список хостов не вводится снаружи и нигде кроме цикла не используется, можно перенести его прямо в цикл:
#!/bin/bash
for i in ya.ru google.com 8.8.8.8 ; do
 ping -c2 -w2 $i
done

да, так работает.

bash -x запускаю чтобы работу скрипта дебажить, там еще много чего происходит и ломается )
мне было важно понять, как передавать переменные в тело цикла, за что вам большое спасибо.
zubastiy
к сожалению нет

[[email protected] ~]$ bash -x work/scripts/ping
+ TEMP=('ya.ru' 'google.com')
+ for I in '${TEMP}'
+ ping ya.ru -c 2
PING ya.ru (213.180.204.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=1 ttl=51 time=14.1 ms
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=2 ttl=51 time=13.5 ms
--- ya.ru ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 13.501/13.848/14.195/0.347 ms

а если
TEMP=('ya.ru' 'google.com')
заменить на
TEMP='ya.ru google.com'
должно работать.
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
zubastiy
к сожалению нет

[[email protected] ~]$ bash -x work/scripts/ping
+ TEMP=('ya.ru' 'google.com')
+ for I in '${TEMP}'
+ ping ya.ru -c 2
PING ya.ru (213.180.204.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=1 ttl=51 time=14.1 ms
64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=2 ttl=51 time=13.5 ms
--- ya.ru ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 13.501/13.848/14.195/0.347 ms

а если
TEMP=('ya.ru' 'google.com')
заменить на
TEMP='ya.ru google.com'
должно работать.

да, так работает, спс.
вот так даже лучше
TEMP=('ya.ru' 'google.com')
for I in ${TEMP[*]}
do
ping ${I} -c 2 -w 2
done
работает и в zsh и в bash
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.