#!/usr/local/bin/bash -x
if [ ! -f "${1}" ]
then
echo "Argument must be a text file."
else
while-loop-script "${1}"
fi
Я сломанный это вверх, потому что я лично считаю чрезвычайно плохую форму, чтобы вложить одну функцию внутри другой; или правдиво даже иметь более одной функции в одном файле. Я не забочусь о размере файла; У меня есть несколько скриптов длиной 300-500 байт. Я изучаю FORTH; фрактализм в этом смысле является добродетелью.
# while-loop-script
while read line
do
IFS="@"
ping -c 3 "${line}"
IFS=" "
done < "${1}"
Не используйте cat для подачи отдельных строк файла в скрипт; он всегда будет терпеть неудачу, и bash попытается выполнить вывод как буквенную команду. Я думал, что печать sed будет работать, и это часто происходит, но по какой-то причине она очень часто заменяет пространства для новых строк, что также крайне раздражает.
Единственный абсолютно пуленепробиваемый способ подачи строки на скрипт, который я знаю, который сохранит все пространство и форматирование, заключается в использовании циклов while-read, а не вместо кота или для циклов sed, как уже упоминалось.
Что-то еще, что вам нужно сделать, чтобы быть уверенным в сохранении пробелов, заключается в том, чтобы установить внутренний разделитель полей (IFS) на то, что вы знаете, ваш файл не будет содержать, а затем сбросить его обратно в пробелы в конце цикла.
Чтобы ответить на личный вопрос: 'else if' не совпадает с' elif', потому что он оставляет ваш первый 'if/then/else' блок открытым при запуске второго, поэтому вам нужно _two_' ends', поэтому вы получаете неожиданный EOF. –