#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
Додавайте break
заяви, куди вам потрібно select
цикл для виходу. Якщо a break
не виконується, select
оператор завершується циклом і знову відображається меню.
У третьому варіанті я включив змінні, які встановлюються select
оператором, щоб продемонструвати, що у вас є доступ до цих значень. Якщо ви виберете його, воно виведе:
you chose choice 3 which is Option 3
Ви можете бачити, що $REPLY
містить рядок, яку ви ввели у запиті. Він використовується як індекс в масиві, ${options[@]}
як якщо б масив був на основі 1. Змінна $opt
містить рядок із цього індексу в масиві.
Зауважте, що вибір може бути простим списком безпосередньо у select
виписці, як це:
select opt in foo bar baz 'multi word choice'
але ви не можете помістити такий список у скалярну змінну через пробіли в одному з варіантів.
Ви також можете використовувати глобулювання файлів, якщо ви вибираєте серед файлів:
select file in *.tar.gz
seq 10 | fzf
. Недолік - fzf не встановлений за замовчуванням. Ви можете знайти fzf тут: github.com/junegunn/fzf