Как создавать диалоговые блоки в интерактивных shell скриптах
whiptail - Как создавать диалоговые блоки в интерактивных shell скриптах
Когда вы устанавливаете новые программы в терминале, вы могли часто видеть появляющиеся информативные диалоговые блоки для обратной связи с вами. Типы диалоговых блоков различны: от простых диалогов да/нет до полей ввода, блоков паролей, чеклистов, меню и так далее. Преимущества использования таких дружественных к пользователю блоков очевидны, ведь они интуитивно направляют вас для ввода необходимой информации.
Создаём блок с сообщением
Пример:
Создание Да/Нет блоков
Одним из частных пользовательских вводов является Да или Нет. В этом случае может быть использован диалоговый блок Да/Нет.
Пример:
Опционально вы можете настроить текст кнопок Да и Нет с помощью опций "—yes-button" and "—no-button"
Пример:
Создаём блок свободного ввода
Если нужно принять любой произвольный текст от пользователя, вы можете использовать этот блок ввода
Пример:
Создание блока для ввода пароля
Блок пароля полезен, когда вы хотите получить чувствительную информацию от пользователя.
Пример:
Создание меню
Когда вы хотите спросить пользователя выбрать один из нескольких произвольных вариантов, вы можете использовать меню.
Пример:
Создание диалога радиолист
Блок радиолист схож по смыслу с меню в том смысле, что вы можете выбрать только одну опцию из списка доступных опций. В отличие от блока меню, тем не менее, вы можете отобразить, какая опция выбрана по умолчанию, определив её статус.
Создаём диалок чеклиста
Чеклист полезен, когда вы хотите попросить пользователя выбрать более чем один вариант из списка опций, он отличается от радиолиста, в котором можно сделать только один выбор.
Пример:
Сооздание строки прогресса
Другой дружественный пользователю диалоговый блок это прогресс бар. whiptail читает из стандартного ввода проценты (от 0 до 100) и отображает соответствующий индикатор датчика.
Теперь вы увидели, как легко создавать полезные диалоговые блоки в интерактивных шелл скриптах.
п.с. Все примеры, кроме последнего, одинаково хорошо работают и в bash, и в sh, Но последний пример не будет работать в простом sh из-за конструкции (i = 0 ; i <= 100 ; i+=20). Поэтому для простого sh подойдёт следующий код: