Я пытаюсь пропинговать IP-адрес и сохранить среднее время прохождения туда и обратно для 5 (например) пакетов, отправленных на IP-адрес. Значение количества пакетов хранится в виде переменной, а IP-адреса берутся из файла. это мой код
for line in $(ls -1 "$file");
do
avg=$(ping -c $COUNT $line | awk '/avg/ {split($0,arr,"/"); print arr[5]}')
echo "$avg"
done
Когда я запускаю команду ping в терминале и добавляю количество пакетов и IP-адрес, команда работает и возвращает значение, но когда я пытаюсь запустить файл, она возвращает сообщение об ошибке: «ping: файл: временная ошибка имени разрешение". Любые идеи, почему это происходит.
Вы перебираете имя файла; нет IP-адреса, соответствующего имени сервера file
.
while IFS= read -r line; do
ping -c "$COUNT" "$line" | awk '/avg/ {split($0,arr,"/"); print arr[5]}'
done<"$file"
В будущем, пожалуйста, попробуйте http://shellcheck.net/, прежде чем обращаться за помощью к человеку, и прочитайте сообщения об ошибках, которые вы получаете.
Предложите запустить
set -x
в качестве второй строки скрипта и изучить содержимое$line
(или просто добавитьecho "line: $line"
перед подстановкой команды). Если он работает в терминале, нет причин, по которым ping не будет работать в скрипте. Никогда не используйтеfor i in $(ls anything)
, см. Подводные камни Bash #1 (есть причина, по которой это #1)