bash как создать меню с подменю

Мне нужна помощь. Я новичок в программировании оболочки Bash, у меня есть задача. Итак, мне нужно сделать меню и в меню подменю. Я имею в виду, тогда вы нажимаете 5 (управление базой данных), чтобы отобразить подменю с 3 вариантами. Я попробовал несколько методов с, но я не могу сделать это. Это мой код:

#!/bin/bash

PS3='Please enter your option: '
options=("Buy" "Sale" "Change data" "View cars" "Database management" "Calculate profits" "Sold cars" "Vechiles in stock" "Exit program")
select opt in "${options[@]}"
do
    case $opt in
    "Buy")
        echo "you chose choice 1"
        ;;
    "Sale")
        ;;
    "Change data")
        ;;
    "View cars")
        ;;
    "Database management")
    PS3='Please enter your option: '
    options=("1" "2" "3")
    select opt in "${options[@]}"
    do
    case $opt in
    "1")
        echo "you chose choice 1"
        ;;
    "2")
        echo "you chose choice 2"
    "3")
        echo "you chose choice 3"
        ;;
    "Calculate profits")
        ;;
    "Sold cars")
        ;;
    "Vechiles in stock")
        ;;
    "Exit program")
        break 
        ;;
    *)
        echo "invalid option $REPLY"
        ;;
    esac
done

Если нажать 5, должно появиться другое меню с «Резервное копирование», «Удалить», «Восстановить», Спасибо.

0
задан 25 May 2019 в 23:08

2 ответа

Я бы предложил использовать функцию оболочки для подменю - помимо того, что код стал более управляемым, он позволяет вам определить local PS3, чтобы пользователю было легче отслеживать, в каком меню он находится. Минимальным прототипом может быть что-то вроде

# submenu
submenu () {
  local PS3='Please enter sub option: '
  local options=("Sub menu item 1" "Sub menu item 2" "Sub menu quit")
  local opt
  select opt in "${options[@]}"
  do
      case $opt in
          "Sub menu item 1")
              echo "you chose sub item 1"
              ;;
          "Sub menu item 2")
              echo "you chose sub item 2"
              ;;
          "Sub menu quit")
              return
              ;;
          *) echo "invalid option $REPLY";;
      esac
  done
}

# main menu
PS3='Please enter main option: '
options=("Main menu item 1" "Submenu" "Main menu quit")
select opt in "${options[@]}"
do
    case $opt in
        "Main menu item 1")
            echo "you chose main item 1"
            ;;
        "Submenu")
            submenu
            ;;
        "Main menu quit")
            exit
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

Конечно, вы можете также определить главное меню в функции оболочки.

0
ответ дан 25 May 2019 в 23:08

Позднее добавление, я знаю - вы можете использовать эту программу меню, над которой я работаю: https://github.com/steveh250/Unix-Menu-Program/ tree/1.11

Последняя версия: https://github.com/steveh250/Unix-Menu-Program

2
ответ дан 27 October 2020 в 19:56

Другие вопросы по тегам:

Похожие вопросы: