Как выполнить ввод в файле сценария

Обновлено: 03.07.2024

Что нужно, чтобы писать скрипты
Владение инструментами командной строки и их необходимыми опциями.
Базовые знания английского языка уровня начальной школы не помешают.

Зачем нужны скрипты
Во-первых, администрирование linux-сервера в той или иной степени сводится к систематическому выполнению одних и тех же команд. Причем не обязательно, чтобы эти команды выполнял человек. Их можно запрограммировать на выполнение машиной.
Во-вторых, даже просто выполнение обычной задачи, которая (вдруг) составляет 20-1000. однообразных операций ГОРАЗДО проще реализовать в скрипте.

Что такое скрипт
Скрипт - набор инструкций, которые должен в определенном порядке и в определенное время выполнить компьютер. Инструкциями могут быть как внутренние команды оболочки (циклы, условия, обработка текстовой информации, работа с переменными окружения и прочее), так и любая программа, выполняемая нами в консоли с необходимыми параметрами.

Напутствие
Я Вам искренне советую писать как можно больше комментариев чуть ли ни к каждой строчке в скрипте. Пройдет время и Вам понадобится изменить или модернизировать написанный когда-то скрипт. Если не помнишь или не понимаешь, что написано в скрипте, то становится сложно его изменять, проще писать с нуля.

Какие скрипты могут нам понадобиться:
устанавливающий правила файервола при загрузке системы.
выполняющий backup настроек и данных.
добавляющий почтовые ящики в почтовый сервер (точнее в базу mysql)
запускающий в определенное время (лучше каждую ночь) программу, которая сканирует логи прокси-сервера и выдает удобный web-отчет по количеству скачанного трафика.
отправляющий нам на почту информацию о том, что кто-то получил доступ к нашему серверу по ssh, время подключения и адрес клиента.

О методике написания скриптов
Создаем текстовый файл, редактируем его, устанавливаем права на выполнение, запускаем, смотрим ошибки, исправляем, запускаем, смотрим ошибки.
Когда все вылизано и работает правильно, ставим его в автозагрузку либо в планировщик на определенное время.

Favorite

Добавить в избранное

Главное меню » Linux » Как мне запросить ввод в Bash?

(1 оценок, среднее: 5,00 из 5)

Bash Heredoc

Ч асто при создании сценария Bash необходимо выполнять вычисления в зависимости от вводимых пользователем данных. В этом руководстве, прежде чем выполнять базовую операцию со сценарием оболочки, сначала давайте взглянем на интерпретацию и проверку вводимых пользователем данных. Мы будем использовать встроенную команду чтения Bash для интерпретации пользовательского ввода Bash. Команда чтения принимает какое-то значение в качестве ввода через пользователя и присваивает его переменной. Он считывал только одну строку через командную строку Bash. В этой статье вы узнаете, как интерпретировать ввод пользователя из терминала и скрипта.

Вот синтаксис для реализации команды чтения:

Пример 01:

Давайте рассмотрим простой пример чтения ввода от пользователя в bash при запросе. Откройте терминал и создайте новый файл «input.sh».

Откройте файл и добавьте в него небольшой код, как показано ниже. Во-первых, оператор echo просит пользователя добавить входное значение. Оператор чтения используется для ввода пользовательского значения, которое будет сохранено в переменной «NAME». Последний оператор echo используется для печати ответа с введенным значением в виде переменной «$NAME».

Пример 02:

Откройте старый файл и напишите в него приведенный ниже код. Мы можем использовать встроенную команду read; пользователю с запросом, используя эту опцию -p. Вы должны вызвать, чтобы использовать ключевое слово «readline» -e, чтобы разрешить редактирование строки с помощью клавиш со стрелками. После этого используйте переменную для печати пути к файлу, введенному пользователем в командной оболочке.

Давайте проверим вывод этого кода с помощью команды bash в терминале. Вы увидите, что он попросит ввести путь к файлу в оболочке. Когда вы вводите необходимое значение и нажимаете Enter, он распечатывает его.

Если вы хотите предложить ответ, вы должны использовать ключевое слово «–i» после строки, указав путь в кавычках.

Давайте проверим вывод обновленного кода с помощью команды bash. Вы заметите, что он предложит вам путь к файлу.

Пример 03:

Приведем еще один пример запроса ввода в оболочке. Запишите приведенный ниже код в файл «input.sh». У нас есть две команды чтения для добавления учетных данных пользователя в оболочку. Ключевое слово «-sp» используется, чтобы скрыть учетные данные «Пароль» при входе в оболочку.

Пример 04:

Используя команду bash, запустите файл. Он запросит названия понравившихся автомобилей. Когда пользователь вводит названия автомобилей последовательно, он сохраняет их в переменных команды чтения и распечатывает их, используя следующие три оператора эха один за другим.

Пример 05:

В приведенном выше примере мы видели, как запрашивать ввод данных пользователем при сохранении ввода в трех переменных. В этом примере мы узнаем, как читать значения, введенные пользователем в одной переменной, как элементы массива, используя ключевое слово «-a». Итак, откройте тот же файл и напишите в нем приведенный ниже код. Оператор echo попросит вас ввести требуемый ввод. В операторе чтения есть ключевое слово «-a», чтобы принимать от пользователя несколько значений и сохранять их в одном массиве переменных «NAMES». В последнем операторе echo все введенные значения печатаются как элементы массива в текстовой строке.

При запуске файла «input.sh» пользователю было предложено ввести значения. Когда пользователь вводит значения, эти значения сохраняются в переменной массива «NAMES». После сохранения этих значений будет выполнен оператор echo, который распечатает введенные имена в виде значений массива внутри себя, как показано.

Пример 06:

Возьмем тот же файл с небольшими изменениями в скрипте. Мы написали две команды чтения для получения значения от пользователя в качестве ввода в оболочке и сохранили их в двух переменных: «NUM1» и «NUM2». После этого обе переменные были распечатаны.

В командном терминале напишите команду Chmod, чтобы назначить этому файлу права на выполнение.

Когда вы запустите этот файл с помощью bash, вы увидите, что он предложит вам последовательно добавлять числа. Когда вы вводите требуемые значения, он распечатывает оба числа по отдельности.

Если вы хотите убедиться, что какое-либо поле или переменная оставлено пустым пользователем, вы можете обновить предыдущий код, как показано ниже. Ключевое слово «-z» используется для проверки обеих переменных, если в них есть пробелы.

Пробуя этот код, пользователь добавил один специальный символ, который генерирует подсказку.

Вывод

В этой статье вы успешно научились запрашивать ввод данных пользователем в оболочке и интерпретировать вводимые пользователем данные, используя несколько очень простых примеров.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

С каждым открытым файлом связан дескриптор файла. [1] Дескрипторы файлов stdin, stdout и stderr -- 0, 1 и 2, соответственно. При открытии дополнительных файлов, дескрипторы с 3 по 9 остаются незанятыми. Иногда дополнительные дескрипторы могут сослужить неплохую службу, временно сохраняя в себе ссылку на stdin, stdout или stderr. [2] Это упрощает возврат дескрипторов в нормальное состояние после сложных манипуляций с перенаправлением и перестановками (см. Пример 16-1).

Операции перенаправления и/или конвейеры могут комбинироваться в одной командной строке.

Допускается перенаправление нескольких потоков в один файл.

Закрытие дескрипторов файлов

Закрыть дескриптор входного файла n.

Закрыть дескриптор выходного файла n.

Дочерние процессы наследуют дескрипторы открытых файлов. По этой причине и работают конвейеры. Чтобы предотвратить наследование дескрипторов -- закройте их перед запуском дочернего процесса.

Дополнительные сведения о перенаправлении ввода/вывода вы найдете в Приложение D.

Команда exec <filename перенаправляет ввод со stdin на файл. С этого момента весь ввод, вместо stdin (обычно это клавиатура), будет производиться из этого файла. Это дает возможность читать содержимое файла, строку за строкой, и анализировать каждую введенную строку с помощью sed и/или awk.

Пример 16-1. Перенаправление stdin с помощью exec

Аналогично, конструкция exec >filename перенаправляет вывод на stdout в заданный файл. После этого, весь вывод от команд, который обычно направляется на stdout, теперь выводится в этот файл.

Пример 16-2. Перенаправление stdout с помощью exec

Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec

Примечания

дескриптор файла -- это просто число, по которому система идентифицирует открытые файлы. Рассматривайте его как упрощенную версию указателя на файл.

Если мы хотим попросить пользователя ввести его, мы будем использовать команду read . Эта команда берет ввод и сохраняет его в переменной.

Давайте рассмотрим простой пример:

introduction.sh

Давайте разберем это:


  • Примечание. Райан выше выделен курсивом, чтобы показать, что это то, что я набрал. На вашем терминальном входе будет нормально отображаться.

Больше с чтением

echo Thankyou $uservar we now have your login details
  • В строках 4 и 5 выше мы включаем подсказку в кавычки, чтобы мы могли иметь место с ней. В противном случае пользовательский ввод начнется сразу после последнего символа подсказки, который не идеален с точки зрения удобочитаемости.


Больше переменных

До сих пор мы рассматривали одно слово как вход. Однако мы можем сделать больше, чем это.

cars.sh


Общий механизм заключается в том, что вы можете указать несколько имен переменных для чтения . Затем прочитайте, затем введите свой ввод и разделите его на пробелы. Затем первый элемент будет назначен первому имени переменной, второй - второму имени переменной и т. д. Если есть больше элементов, чем имена переменных, остальные элементы будут добавлены к последнему имени переменной. Если количество элементов меньше, чем имена переменных, то остальные имена переменных будут пустыми или пустыми.

Чтение из STDIN

Это общепринятое в Linux для труб серии простой, одной цели команды вместе , чтобы создать большее решение , отвечающее наши точные потребности. Способность делать это - одна из реальных задач Linux. Оказывается, мы можем легко разместить этот механизм и с нашими скриптами. Поступая таким образом, мы можем создавать скрипты, которые действуют как фильтры для изменения данных по определенным для нас способам.

Баш вмещает трубопроводы и перенаправление посредством специальных файлов. Каждый процесс получает собственный набор файлов (один для STDIN, STDOUT и STDERR соответственно), и они связаны при вызове или перенаправлении. Каждый процесс получает следующие файлы:

  • STDIN - /proc/<processID>/fd/0
  • STDOUT - /proc/<processID>/fd/1
  • STDERR - /proc/<processID>/fd/2

Чтобы сделать жизнь более удобной, система создает для нас несколько ярлыков:

  • STDIN - /dev/stdin or /proc/self/fd/0
  • STDOUT - /dev/stdout or /proc/self/fd/1
  • STDERR - /dev/stderr or /proc/self/fd/2

fd в дорожках выше обозначает дескриптор файла.

Поэтому, если мы хотим, чтобы наш скрипт мог обрабатывать данные, которые были отправлены на него, все, что нам нужно сделать, это прочитать соответствующий файл. Все файлы, упомянутые выше, ведут себя как обычные файлы.

summary

Давайте разберем это:

  • Строки 4, 5, 6 - Распечатайте заголовок для вывода
  • Строка 8 - cat файл, представляющий STDIN, вырезает установку разделителя на пробел, поля 2 и 3 затем сортируют вывод.


Так что я должен использовать?

Итак, теперь у нас есть 3 метода ввода данных от пользователя:

  • Аргументы командной строки
  • Чтение ввода во время выполнения скрипта
  • Принять данные, которые были перенаправлены в скрипт Bash через STDIN

Какой метод лучше всего зависит от ситуации.

Как правило, вы предпочитаете аргументы командной строки. Они наиболее удобны для пользователей, поскольку данные будут храниться в истории команд, чтобы они могли легко вернуться к нему. Это также лучший подход, если ваш скрипт может быть вызван другими скриптами или процессами (например, возможно, вы хотите, чтобы он периодически запускался с использованием CRON).

Иногда характер данных таков, что было бы не идеально для его хранения в истории команд людей и т. д. Хорошим примером этого являются учетные данные для входа (имя пользователя и пароль). В этих обстоятельствах лучше всего читать данные во время выполнения скрипта.

Если весь скрипт выполняет обработку данных определенным образом, то, вероятно, лучше всего работать с STDIN. Таким образом, его можно легко добавить в конвейер.

Иногда вы можете обнаружить, что комбинация идеальна. Пользователь может предоставить имя файла в качестве аргумента командной строки, а если нет, то скрипт обработает то, что он найдет в STDIN (когда мы посмотрим на операторы If, мы увидим, как это может быть достигнуто). Или, возможно, аргументы командной строки определяют определенное поведение, но чтение также используется для запроса дополнительной информации, если требуется.

Ультимативно вы должны думать о 3 факторах при принятии решения о том, как пользователи будут предоставлять данные вашему сценарию Bash:

Читайте также: