Skip to content

Instantly share code, notes, and snippets.

@scriptum
Created November 14, 2016 19:15
Show Gist options
  • Select an option

  • Save scriptum/8a198159e8e5e90326cc9bdabc7c64fe to your computer and use it in GitHub Desktop.

Select an option

Save scriptum/8a198159e8e5e90326cc9bdabc7c64fe to your computer and use it in GitHub Desktop.
#!/bin/bash
# Пример меню в Bash
# включить отладку
DEBUG=1
# Текст запроса
PS3='Введите номер пукнта меню (q - выход): '
# Перечень пунктов меню
OPTIONS=(
"Добавить пользователя"
"Удалить пользователя"
"Изменить параметры пользователя"
"Добавить группу"
"Удалить группу"
"Изменить параметры группы"
)
# Перечень функций, которые отвечают за реализацию каждого пункта меню
FUNCTIONS=(
add_user
del_user
mod_user
add_group
del_group
mod_group
)
# одна из реалзиаций для примера
add_user()
{
PS3='Выберите пользователя из списка (q - выход): '
select user in $(getent passwd | cut -d: -f1); do
if [[ -z $user ]]; then
echo "Неверный выбор" >&2
continue
fi
echo "Вы выбрали пользователя '$user'. Спасибо за внимание!"
break
done
}
select opt in "${OPTIONS[@]}"; do
if [[ $DEBUG == 1 ]]; then
echo "opt=$opt" # opt содержит имя пункта меню, полезно для выбора пользователей или других объектов
echo "REPLY=$REPLY" # REPLY содержит ответ пользователя
fi
case $REPLY in
[1-${#OPTIONS[*]}])
# с помощью данного хитрого способа можно автоматически перейти в нужную реализацию
FUNC=${FUNCTIONS[$((REPLY-1))]}
echo "Запускаю функцию $FUNC"
$FUNC || echo "Ошибка! Нужно реализовать функцию $FUNC" >&2
break
;;
q) break;;
*) echo "Неверный пункт меню" >&2;;
esac
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment