bash скрипт меню выбора

Написание скрипта простого консольного Bash меню

Код рабочего скрипта представлен ниже, после блока кода приведено описание работы

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

Скрипт начинается с указания командного интерпретатора

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

Пока x = 0 выводим при помощи echo строку «Do u like to code (Y/N). Hit q to quit»

Далее даем команду на считывание ответа и используя оператор case выводим различные результаты при разных ответах (предварительно очищаем экран clear)

do
clear
read answer

Если ответ Y — выводим «It’s great, of course u love it, especially in bash»

case «$answer» in
Y)
echo «It’s great, of course I love it, especially in bash»
x=1
;;

Приравниваем x=1 и выходим из цикла, ;; означает окончание каждого из возможных вариантов в case

Тем же образом выводим заданное предложение в случае ответа N

N)
echo «U said NO. It’s definetly is not true…Think it over again»
x=1
;;

При нажатии на q будет осуществляться выходи из программы с выводом «This is the end», которому будет предшествовать отсчет от 5 до 0 с интервалом в 1 секунду. Цифры при обратном отсчете выводятся посредством утилиты figlet.

bash скрипт меню выбора. Смотреть фото bash скрипт меню выбора. Смотреть картинку bash скрипт меню выбора. Картинка про bash скрипт меню выбора. Фото bash скрипт меню выбора

При нажатии любой другой клавиши в момент считывания ответа будет выоплняться условие определяемое при помощи *). Выводим «Not an option» и через 3 секунды задаем вопрос снова.

*)
clear
echo «Not an option»
sleep 3

Оператор case завершается вводом esac. За счет done завершается do

esac
done

Посмотрите другой пример использования оператора case в bash.

Источник

Bash Select (Создание Меню)

Главное меню » Linux » Bash Select (Создание Меню)

bash скрипт меню выбора. Смотреть фото bash скрипт меню выбора. Смотреть картинку bash скрипт меню выбора. Картинка про bash скрипт меню выбора. Фото bash скрипт меню выбора

Конструкция select позволяет генерировать меню.

Конструкции select в Bash

Конструкция select создает меню из списка элементов. Она имеет почти такой же синтаксис, что и цикл for:

[LIST] – может быть последовательность строк, разделенных пробелами, диапазоном чисел, выводом команды, массивом и т. д. Настраиваемое приглашение для конструкции select может быть задано с помощью переменной среды PS3.

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

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

Чтобы продемонстрировать, как работает конструкция select, давайте рассмотрим следующий простой пример:

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

Пример select в Bash

Как правило, select используется в сочетании с case и заявлением if.

Давайте посмотрим на более практичный пример. Это простой калькулятор, который запрашивает у пользователя ввод и выполняет основные арифметические операции, такие как сложение, вычитание, умножение и деление.

Когда скрипт выполняется, он отображает меню и подсказку PS3. Пользователю предлагается выбрать операцию, а затем ввести два числа. В зависимости от ввода пользователя скрипт напечатает результат. Пользователю будет предложено выполнить новую операцию после каждого выбора, пока команда break не будет выполнена.

Недостатком этого скрипта является то, что он может работать только с целыми числами.

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

Вывод

Конструкция select позволяет легко создавать меню. Это особенно полезно при написании сценариев оболочки, которые требуют ввода данных пользователем.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

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

Источник

Локализация своих скриптов на BASH

Создание меню на BASH — задача сама по себе не сложная: «case тебе в руки и echo в спину». Решая её в очередной раз, мне захотелось добавить возможность отображать текст на других языках. Осталось решить, как сделать сам процесс локализации меню более удобным. Если оно большое, то решение «в лоб» превратит его в громоздкую копипасту. Здесь я хотел бы поделиться тем, как решил эту проблему для себя. Надеюсь, для кого то это будет небезынтересным.

bash скрипт меню выбора. Смотреть фото bash скрипт меню выбора. Смотреть картинку bash скрипт меню выбора. Картинка про bash скрипт меню выбора. Фото bash скрипт меню выбора

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

Я вполне понимаю и принимаю, что существуют и другие языки программирования. Как когда-то кто-то сказал здесь на Хабре — если при написании скрипта на BASH возникает необходимость хоть в одной функции, то лучше взять нормальный язык. Я с этим согласен, но иногда, как говорится, хочется, потому что хочется.

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

Реализация будет состоять из:

Теперь рассмотрим подробнее

Зададим язык, добавив короткий буквенный код языка (ru, en), для начала английский:

Добавим массивы слов и предложений (по количеству языков):

Создадим косвенную ссылку и сформируем из неё новый массив в переменной lng:

То есть здесь для переменной lng создаётся значение, состоящее из части имени массива со словами и кода заданного языка из переменной langset. Далее создаётся массив, который при langset=en будет равен language_en, а при langset=ru будет равен language_ru.
Если языков будет много, то такой подход позволит избавиться от многочисленных if-elif или case. Чтобы изменить язык, достаточно будет добавить массив с переводом и установить язык в переменной langset.

Запустим всё это в консоли:

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

Построение меню

А теперь попробуем создать скрипт.
Для примера я взял меню управления командами Git через CLI (command line interface). Это немного надуманно, но хорошо подходит для примера, так как в Git много команд и как раз можно построить единое по своей задаче меню с множеством параметров.

Для начала задаем язык и массив с пунктами меню как это уже делали выше. Ради удобства, я разделил массив на две части: первая — это непосредственно меню, вторая — информационные сообщения и приглашения командной строки, которые необходимо будет вывести по ходу работы.

Пройдемся по массивам и создадим новые для lng и msg, которые и будут использоваться:

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

Небольшое отступление: я уверен, почти всем встречались наполовину переведённые приложения. Особенно этим грешат кастомные прошивки для телефонов. Мне никогда это не нравилось, но в данном случае я всё же решил предусмотреть такую возможность неполного перевода. Это позволит при добавлении нового языка не дублировать все элементы массива, а добавить только те, которые пользователю хотелось бы перевести.

Для этого в цикле сравним созданный массив с англоязычным (английский считаем языком по умолчанию): если записи не существует (либо элемент массива пуст), дополним англоязычным вариантом.

Теперь, когда с языками разобрались, приступим к построению меню. Тут всё стандартно: бесконечный цикл, внутри него цикл для вывода элементов на экран и выбор вариантов через case.

Формируем массив для вывода на экран. Только те пункты, которые нам нужны:

Здесь делаем индексацию с 1, чтобы выводить индекс как соответствующий пункт меню.

Добавляем шапку, пробегаемся по индексам через $ и выводим на экран:

Ну и заключительный оператор выбора case с обработкой введенного значения:

Здесь case сделан упрощенным, только для примера. В следующей статье я буду использовать его в более универсальном варианте.

Это первая статья из двух. В следующей рассмотрим создание многоуровнего меню, разукрасим вывод (как же без этого), а также попробуем сохранить настройки, то есть задать код языка прямо из меню, не открывая Shell-скрипт в текстовом редакторе.

Спасибо, что дочитали до конца. Надеюсь, было не скучно.

Источник

Как я могу создать меню выбора в сценарии оболочки?

Я создаю простой скрипт bash и хочу создать в нем меню выбора, например:

И по выбору пользователя я хочу, чтобы выполнялись разные действия. Я noob, пишущий для bash, я искал ответы в Интернете, но ничего конкретного не получил.

Добавляйте break операторы везде, где вам нужен select цикл для выхода. Если a break не выполняется, select оператор зацикливается, и меню отображается повторно.

В третий вариант я включил переменные, которые устанавливаются select оператором, чтобы продемонстрировать, что у вас есть доступ к этим значениям. Если вы выберете его, он выведет:

Обратите внимание, что варианты выбора могут быть простым списком непосредственно в select выражении, например так:

но вы не можете поместить такой список в скалярную переменную из-за пробелов в одном из вариантов.

Вы также можете использовать глобирование файлов, если вы выбираете среди файлов:

Оба будут зациклены, пока пользователь явно не выберет Выход (или Отмена для zenity). Это хороший подход для интерактивных меню сценариев: после выбора и выполнения действия снова открывается меню для другого выбора. Если выбор должен быть одноразовым, используйте только break после esac (подход zenity может быть дополнительно сокращен)

Оба case основаны на индексе, а не на стоимости. Я думаю, что это легче кодировать и поддерживать

Массив также используется для zenity подхода.

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

PS3 и REPLY vars не может быть переименован. select жестко запрограммирован, чтобы использовать их. Все остальные переменные в скрипте (opt, options, prompt, title) могут иметь любые имена, которые вы хотите, при условии, что вы делаете корректировки

Источник

Многофункциональное меню в скрипте bash

Я новичок в Bash, но я хотел бы создать скрипт, в котором я бы хотел, чтобы пользователь мог выбрать несколько вариантов из списка вариантов.

По сути, я хотел бы что-то похожее на пример ниже:

Однако в моем сценарии было бы больше опций, и я бы хотел, чтобы были выбраны кратные числа. Так что-то вроде этого:

1) Вариант 1
2) Вариант 2
3) Вариант 3
4) Вариант 4
5) Готово

Было бы замечательно иметь отзывы о тех, кого они выбрали, например, плюсики рядом с теми, которые они уже выбрали. Например, если вы выберете «1», я бы хотел, чтобы страницу очистили и перепечатали:

Затем, если вы выберете «3»:

Кроме того, если они снова выбрали (1), я бы хотел, чтобы он отменил выбор опции:

И наконец, когда нажата кнопка «Готово», я бы хотел, чтобы список тех, которые были выбраны, отображался до выхода из программы, например, если текущее состояние:

Нажатие 5 должно напечатать:

. и сценарий завершается.

Любые советы будут высоко ценится.

bash скрипт меню выбора. Смотреть фото bash скрипт меню выбора. Смотреть картинку bash скрипт меню выбора. Картинка про bash скрипт меню выбора. Фото bash скрипт меню выбора

Редактировать:

Вот пример сценария, использующего параметры из вашего вопроса:

Если вы думаете, что whiptail это сложно, то здесь идет код только для bash, который делает именно то , что вы хотите. Это коротко (

20 строк), но немного загадочно для начинающего. Помимо отображения «+» для отмеченных опций, он также предоставляет обратную связь для каждого действия пользователя («недопустимая опция», «опция X была отмечена» / не отмечена и т. Д.).

Тем не менее, вы идете!

Вот способ сделать именно то, что вы хотите, используя только функции Bash без внешних зависимостей. Он отмечает текущие выборы и позволяет переключать их.

Для ksh измените первые две строки функции:

Он может обрабатывать и более сложные анкеты, если кто-то захочет это сделать. Вот некоторые особенности:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *