В скрипте оболочки можно использовать цикл:
failed=1 # any number not equal to zero
while [ $failed -ne 0 ]
do
ping -n 8.8.8.8
failed=$?
done
# after the $? becomes "0" it will get out of the while loop
echo "ping succeeded"
, чтобы остановить печать соединения : Network is notдоступно
message you can edit the line with ping like this:
ping -n 8.8.8.8 2> /dev/null
Or you can add a sleep
in the loop to reduce the number of those messages.
The script can be упрощён до
while ! ping -n 8.8.8.8
do
sleep 1
done
Which letts it be write in one line:
while ! ping -n 8.8.8.8; do sleep 1; done
Вы можете использовать fping
с его опциями -l
и -I
вместо ping
. Для этого необходимо знать имя интерфейса и запустить от имени root:
root@here:~# fping -l -I wlan0 -n 8.8.8.8
me@here:~$ sudo fping -l -I eth0 -n 8.8.8.8
AFAICT, ping
не будет работать, если он не может открыть сокет на интерфейсе (потому что интерфейс не работает). Если вы проверите свои устройства с помощью ip link show
, то увидите, какие устройства вверх или вниз.
Попробуйте сначала активировать сетевое устройство.
$ sudo ip link set <iface> up
$ ping -n 8.8.8.8
Я протестировал это на моем блоке Arch Linux с вниз Wi-Fi интерфейсом, и вверх виртуальным ethernet (IP-адрес не назначен) интерфейсом. В первом случае ping
выходит, а во втором ping
является непрерывным.
В противном случае используйте скрипт оболочки сетевого интерфейса.
.