Пользовательский ввод в Bash

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

read var1

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

introduction.sh

#!/bin/bash
# Ask the user for their name

echo Hello, who am I talking to?

read varname

echo It\'s nice to meet you $varname

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

  • Строка 4 - Распечатайте сообщение, запрашивающее пользователя для ввода.
  • Строка 6 - Запустите команду чтения и сохраните ответ пользователя в переменной varname
  • Строка 8 - echo еще одно сообщение, чтобы проверить, что команда чтения выполнена. Примечание. Мне пришлось поставить обратную косую черту (\) перед «так, чтобы она была экранирована.

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

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

Вы можете изменить поведение чтения с помощью различных параметров командной строки. (См. Страницу руководства для чтения, чтобы увидеть все из них.) Однако два часто используемых варианта - это -p, который позволяет вам указать подсказку и -s, что делает ввод тихим. Это может упростить запрос комбинации имени пользователя и пароля, как показано ниже:
login.sh

#!/bin/bash
# Ask the user for login details

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

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

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

cars.sh

#!/bin/bash
# Demonstrate how read actually works

echo What cars do you like?

read car1 car2 car3

echo Your first car was: $car1
echo Your second car was: $car2
echo Your third car was: $car3

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

Чтение из 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

#!/bin/bash
# Основное резюме моего отчета о продажах

echo Here is a summary of the sales data:
echo ====================================
echo

cat /dev/stdin | cut -d' ' -f 2,3 | sort

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

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

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

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

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

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

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

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

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

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

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

  • Простота использования - какой из этих методов облегчит пользователям использование моего сценария?
  • Безопасность. Есть ли конфиденциальные данные, которые я должен обрабатывать надлежащим образом?
  • Надежность. Могу ли я сделать так, чтобы моя работа скриптов была интуитивно понятной и гибкой, а также усложнять ошибки?

Часть 2. Переменные в Bash

Часть 4. Сложение, вычитание, умножение, деление, модуль в Bash

Источник: https://ryanstutorials.net/bash-scripting-tutorial/bash-input.php

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Adblock
detector