- Создание диалоговых боксов в интерактивных скриптах оболочки
- Создание бокса с сообщением
- Создание бокса да/нет
- Создание поля ввода с произвольным текстом
- Создание поля ввода пароля
- Создание бокса с меню
- Создание диалога Radiolist
- Создание диалога Checklist
- Создание Progress Bar
- Как создавать диалоговые блоки в интерактивных shell скриптах
- Создаём блок с сообщением
- Создание Да/Нет блоков
- Создаём блок свободного ввода
- Создание блока для ввода пароля
- Создание меню
- Создание диалога радиолист
- Создаём диалок чеклиста
- Сооздание строки прогресса
- whiptail или диалог
- Взаимодействие bash-скриптов с пользователем
- Переменные
- Параметры командной строки
- Вопросы и подтверждения
- OK / FAIL
- Псевдографика
- Bash Shell Scripting/Whiptail
- Contents
- Info box [ edit | edit source ]
- Message box [ edit | edit source ]
- Yes/no box [ edit | edit source ]
- Input box [ edit | edit source ]
- Text box [ edit | edit source ]
- Password box [ edit | edit source ]
- Menus [ edit | edit source ]
- Check list [ edit | edit source ]
- Radio list [ edit | edit source ]
Создание диалоговых боксов в интерактивных скриптах оболочки
Оригинал: How to create dialog boxes in an interactive shell script
Автор: Dan Nanni
Дата публикации: 20 ноября 2014 года
Перевод: А. Кривошей
Дата перевода: июнь 2016 г.
При установке новых программ в консольном окружении вы часто можете видеть информативные диалоговые боксы, в которых необходимо произвести определенные действия. Среди них простые диалоги типа да/нет, поля для ввода пароля, списки, в которых необходимо отметить требуемые элементы, меню и так далее. Их преимущества очевидны, так как они делают процесс установки интуитивно понятным пользователю.
Если вы пишете интерактивный скрипт оболочки, вы можете использовать такие диалоговые боксы для пользовательского ввода. Программа whiptail, предустановленная во всех современных дистрибутивах Linux, позволяет упростить процесс создания консольных диалоговых боксов в скриптах.
В этом руководстве мы рассмотрим создание дружественных пользователю диалоговых боксов в скриптах оболочки с помощью whiptail. Мы также продемонстрируем фрагменты кода Bash различных диалоговых боксов, поддерживаемых whiptail.
Создание бокса с сообщением
Бокс с сообщением показывает любой текст с кнопкой подтверждения для продолжения выполнения скрипта.
Создание бокса да/нет
Широко распространенный вариант, когда пользователь может выбрать «да» или «нет».
Опционально вы можете заменить текст на кнопках «Yes» и «No» с помощью опций «—yes-button» и «—no-button».
Создание поля ввода с произвольным текстом
Если вы хотите дать пользователю возможность вводить любой текст, вы можете использовать input box.
Создание поля ввода пароля
Поле для ввода пароля полезно, если вы хотите дать пользователю возможность скрывать вводимые символы.
Создание бокса с меню
Если вы хотите, чтобы пользователь выбирал из заранее предопределенных вариантов, используйте menu box.
Создание диалога Radiolist
radiolist box похож на menu box в том плане, что вы можете выбрать только одну из доступных опций. Однако здесь вы можете указать, какая опция выделена по умолчанию, задав ее статус.
Создание диалога Checklist
checklist полезен, если вы хотите дать пользователю возможность выбирать одновременно несколько опций из предопределенного списка.
Создание Progress Bar
progress bar — еще один дружественный пользователю диалоговый бокс. whiptail читает процент выполнения (от 0 до 100) из стандартного ввода и отображает в виде индикатора.
Теперь вы видите, насколько просто вы можете создавать полезные диалоговые боксы в интерактивных скриптах оболочки. В следующий раз, когда вы будете писать скрипт, почему бы не попробовать whiptail?
Источник
Как создавать диалоговые блоки в интерактивных shell скриптах
Когда вы устанавливаете новые программы в терминале, вы могли часто видеть появляющиеся информативные диалоговые блоки для обратной связи с вами. Типы диалоговых блоков различны: от простых диалогов да/нет до полей ввода, блоков паролей, чеклистов, меню и так далее. Преимущества использования таких дружественных к пользователю блоков очевидны, ведь они интуитивно направляют вас для ввода необходимой информации.
Когда вы пишите интерактивный шелл скрипт, вы на самом деле можете использовать такие диалоговые блоки для принятия ввода пользователя. Будучи предварительно установленной на всех современных дистрибутивах Linux, программа под названием whiptail может упростить процесс создания шелл скриптом диалоговых и информационных блоков в терминале наподобие тех, что графических интерфейсов, что кодируют Zenity или Xdialog для скриптов.
В этом уроке я опишу как с использованием whiptail создать дружественный пользователю диалоговые блоки в шел скрипте. Я также покажу Баш фрагменты кода различных диалоговых блоков, поддерживаемых в whiptail.
Создаём блок с сообщением
Блок с сообщением показывает произвольный текст с кнопкой подтверждения для продолжения.
Создание Да/Нет блоков
Одним из частных пользовательских вводов является Да или Нет. В этом случае может быть использован диалоговый блок Да/Нет.
Опционально вы можете настроить текст кнопок Да и Нет с помощью опций «—yes-button» and «—no-button»
Создаём блок свободного ввода
Если вы хотите принять любой произвольный текст от пользователя, вы можете использовать этот блок ввода
Создание блока для ввода пароля
Блок пароля полезен, когда вы хотите получить чувствительную информацию от пользователя.
Создание меню
Когда вы хотите спросить пользователя выбрать один из нескольких произвольных вариантов, вы можете использовать меню.
Создание диалога радиолист
Блок радиолист схож по смыслу с меню в том смысле, что вы можете выбрать только одну опцию из списка доступных опций. В отличие от блока меню, тем не менее, вы можете отобразить, какая опция выбрана по умолчанию, определив её статус.
Создаём диалок чеклиста
Чеклист полезен, когда вы хотите попросить пользователя выбрать более чем один вариант из списка опций, он отличается от радиолиста, в котором можно сделать только один выбор.
Сооздание строки прогресса
Другой дружественный пользователю диалоговый блок это прогресс бар. whiptail читает из стандартного ввода проценты (от 0 до 100) и отображает соответствующий индикатор датчика.
Теперь вы увидели, как легко создавать полезные диалоговые блоки в интерактивных шелл скриптах. В следующий раз, когда вам понадобиться написать шелл скрипт для кого-то, почему бы не попробовать whiptail и не впечатлить его или её? 🙂
п.с. Все примеры, кроме последнего, одинаково хорошо работают и в bash, и в sh, Но последний пример не будет работать в простом sh из-за конструкции (i = 0 ; i
Источник
whiptail или диалог
Я собираюсь создать скрипт, который будет использовать пользовательский ввод, поэтому я решил использовать whiptail, но немного путаю тот, который переносится и будет работать в ubuntu 10.x и выше и CentOs5.x и выше.
Я знаю, что read , но мне нужен диалог, как инструмент, поэтому, если кто-нибудь знает какую-либо альтернативу, просто дайте мне знать.
whiptail устанавливается по умолчанию для большинства deb-based систем, а dialog – нет.
Afair, основанный на rpm whiptail также является диалоговым окном по умолчанию.
Думаю, это важно для вас.
Таким образом, whiptail является правильным выбором из точки переносимости.
Также whiptail основан на newt , в то время как dialog основан на ncurses . С моей точки зрения, первый из них более красив (:
Почему бы не использовать оба варианта:
(Требуется bash 4)
(Это не обязательно ответ, но я написал как таковой из-за количества кода. У меня нет практического опыта работы с whiptail . whiptail это позже, если пользователь whiptail тестируемое решение на это.)
Поскольку Bash Shell Scripting / Whiptail пишет:
Из README: whiptail предназначен для перехода в режим совместимости с диалоговым окном (1), но имеет меньше возможностей: некоторые диалоговые окна не реализованы, например, хвост, время, календарь и т. Д.
Это означает, что вам необязательно решать одно или другое. Просто определите, какой из них доступен, а затем используйте сценарий:
(Да, описанное выше обнаружение не сработает на инструментах, установленных внутри каталогов с именем, содержащим символы новой строки. Я просто сохранил его просто.)
Источник
Взаимодействие bash-скриптов с пользователем
Любой приказ, который может быть неправильно понят, понимается неправильно (Армейская аксиома)
Редкий скрипт лишен необходимости общения с пользователем. Мы ожидаем, что программа (утилита) будет выполнять то, что нам от нее хочется. Следовательно, нужны инструменты влияния на них, да и программа сама должна объяснить, как продвигается ее работа.
Данным топиком я хочу рассмотреть несколько способов взаимодействия bash-скриптов с пользователем. Статья рассчитана на новичков в скриптинге, но, надеюсь, люди опытные тоже найдут что-нибудь интересное для себя.
Топик так же снабжен примитивными примерами, не несущими смысловой нагрузки, но позволяющими посмотреть в работе некоторые интересные штуки.
Переменные
В файл config.cfg не забудем поместить строчку EMAIL=example@gmail.com
Параметры командной строки
Еще один способ сообщить данные программе — указать при запуске в командной строке. Содержатся эти параметры в переменных с номерами. Например: $0 — имя скрипта, $1 — первый параметр, $2 — второй параметр и т. д. Также существуют две вспомогательные переменные: $# содержит количество переданных аргументов; $@ содержит все аргументы, переданные скрипту, разделенные пробелами.
Вопросы и подтверждения
Обратите внимание, что на скриншоте буква «Д» — большая. Это означает действие по умолчанию, то есть если пользователь ничего не введет, то это будет равнозначно вводу «Д».
OK / FAIL
Вот так выглядит работа скрипта:
Хорошие люди написали расширенную версию скрипта с логированием и прогресом выполнения. С радостью поделюсь ссылкой.
Исходя из вышеприведенной ссылки код можно упростить.
Псевдографика
Не забываем вставлять clear для очистки экрана, чтобы не оставлять синий фон. Эта утилита поддерживает еще очень много типов диалоговых окон. Главным недостатком является то, что по умолчанию ее нет в системе.
Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.
Хоть есть ярые противники GUI, но он явно имеет право на существование. Такие диалоги можно получить с помощью команды kdialog (если графической оболочкой выступает KDE), либо gdialog и zenity (для Gnome).
Например, форма для ввода пароля:
Как видите, явным недостатком этого метода является привязанность к конкретной среде рабочего стола. Да и вообще к графической среде, которая может и отсутствовать. Но, тем не менее, может и пригодиться когда-нибудь.
P.S. Продолжение следует…
UPD: Добавил упрощенный код в раздел «OK / FAIL».
UPD2: Добавил пример подключения конфигурационного файла в раздел «Переменные».
Источник
Bash Shell Scripting/Whiptail
Whiptail is a program that allows shell scripts to display dialog boxes to the user for informational purposes, or to get input from the user in a friendly way. Whiptail is included by default on Debian.
From the Linux Dictionary: whiptail is a «dialog» replacement using newt instead of ncurses. From its README: whiptail is designed to be drop-in compatible with dialog(1), but has fewer features: some dialog boxes are not implemented, such as tailbox, timebox, calendarbox, etc.
Try using dialog to replace whiptail if you don’t have whiptail: alias whiptail='dialog'
Note that there are also other dialog-compatible programs like xdialog (Displays X11 Windows) and zenity (aka gdialog, displays Gtk Windows). Reading dialog’s manual page should be helpful. Always read the man pages or —help so you know in which way they’re different from dialog.
Contents
Info box [ edit | edit source ]
A simple type of dialog box in Whiptail is the info box. This shows a dialog box containing text to the user.
In the example above, the value of --title is displayed at the top of the dialog box. The first argument to --infobox is the dialog box text which is shown beneath the title. The next two arguments specify the height and width of the dialog box. The width is set to 78 as most terminals will be at least 80 columns or more.
There is a bug that makes the Info Box not display on some shells. If this is the case you can set the terminal emulation to something different and it will work.
Message box [ edit | edit source ]
A message box is very similar to an info box, except that it waits for the user to hit the OK button. Usage is similar to the info box:
Yes/no box [ edit | edit source ]
The simplest way to get input from the user is via a Yes/no box. This displays a dialog with two buttons labelled Yes and No.
Input box [ edit | edit source ]
A way to get free-form input from the user is via an input box. This displays a dialog with two buttons labelled Ok and Cancel.
Text box [ edit | edit source ]
A text box with contents of the given file inside. Add —scrolltext if the file is longer than the window.
Password box [ edit | edit source ]
A way to get a hidden password from the user is via a password box. This displays a dialog with two buttons labelled Ok and Cancel.
Menus [ edit | edit source ]
Whenever you want to present a list of options to the user, whiptail has several dialog types to choose from.
A menu should be used when you want the user to select one option from a list, such as for navigating a program.
The values given to —menu are:
- The text describing the menu ("Choose an option")
- The height of the dialog (25)
- The width of the dialog (78)
- The height of the menu list (16)
The rest of the values are a list of menu options in the format tag item, where tag is the name of the option which is printed to stderr when selected, and item is the description of the menu option.
If you are presenting a very long menu and want to make best use of the available screen, you can calculate the best box size by.
Check list [ edit | edit source ]
At some point, you will want to present options to the user which would not be appropriate to place in a menu.
A check list allows a user to select one or more options from a list.
When the user confirms their selections, a list of the choices is printed to stderr.
Radio list [ edit | edit source ]
A radio list is a dialog where the user can select one option from a list. The difference between a radio list and a menu is that the user selects an option (using the space bar in whiptail) and then confirms that choice by hitting OK.
Источник