Я новичок в программировании bash, и мне было интересно, как выйти из цикла bash, как только это будет выполнено с помощью операторов.Как сделать bash для выхода петли?
Я пытаюсь создать скрипт ping и он работает .. но сценарий не выходит. Скажем, последний адрес хоста 192.168.42.18 .. после этого сценарий не выходит. Он просто застревал, пытаясь повторить.
Как я уже сказал Ильм новый, так что я прошу прощения за мой noobness XD
Я попытался 2 метода и оба метода в конечном итоге в не выходя после заявления получить казнены.
Метод 1
for ((x=42;x<=43;x++))
do
for ((y=1;y<=20;y++))
do
ping -c 1 192.168.$x.$y | grep "bytes from" |cut -d " " -f 4|cut -d":" -f 1 &
done
done
Метод 2
#!/bin/bash
for n in {42..43}
do
for h in {1..100}
do
ping -c 1 192.168.$n.$h | grep "bytes from" |cut -d " " -f4 | cut -d ":" -f1 &
done
done
Просьба пролить некоторый свет на то, как я должен идти дальше.
Последний адрес: 43.20, почему вы думаете, что должно быть 42.18? Каково условие завершения цикла? – karakfa
Неясно, в чем проблема. Для циклов * do * exit после последней итерации. Что именно вы видите? – chepner
Я рекомендую вам избегать использования ваших трубопроводов. Он может порождать больше процессов, чем вы, вероятно, должны обрабатывать, и затрудняет отладки вещей. То, что * выглядит * как '.18', является последней обработанной обработкой, может быть просто' .18', являющейся строкой списка для * завершения * обработки. Посмотрите, работает ли скрипт без '&' в конце труб. Кроме того, исследуйте ['fping'] (http://fping.org/) в качестве альтернативы; он, вероятно, доступен для вашего дистрибутива Linux. – ghoti