Как я могу изменить приведенный ниже скрипт следующим образом:
#!/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 3"
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
Вы можете извлечь обработку опций для функции:
handleOption() {
local opt=$1
case "$opt" in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice 3"
;;
"Quit")
return 1
;;
*) echo invalid option;;
esac
}
И меню для другой функции:
menu() {
local PS3='Please enter your choice: '
select opt in "${options[@]}"
do
handleOption "$opt" || break
done
}
И затем реализовать проверку первого аргумента командной строки:
1..${#options[@]}
? handleOption
непосредственно с соответствующим значением из массива options
Как-то так:
arg=$1
if [[ $arg =~ ^[0-9]+$ ]] && (( 1 <= arg )) && (( arg <= ${#options[@]} )); then
opt=${options[arg - 1]}
handleOption "$opt"
elif [ "$arg" ]; then
echo "warning: invalid option: $arg"
menu
else
menu
fi