AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 733722
Accepted
user330163
user330163
Asked: 2023-01-31 07:53:14 +0800 CST2023-01-31 07:53:14 +0800 CST 2023-01-31 07:53:14 +0800 CST

返回脚本中的 root_menu 没有按应有的方式响应

  • 772

单文件 bash 脚本中的菜单及其子菜单,每个都有一个返回根目录的菜单。

我的问题是show_root_menu调用有时只是跳转到上层菜单而不是根目录。

Bash 安装程序菜单。

nvidia 子菜单最常出错,返回根菜单。

show_pckg_menu当从“安装图形专有驱动程序”子菜单中选择“显示根菜单”时,它会转到“包选项” :

显示根菜单


显示 nvidia_menu


show_pckg_menu

到目前为止,我的其他相关问题已解决:

  • “sh 命令”和作为可执行文件运行之间有什么区别?
  • 创建和调试 bash 脚本菜单

$ shellcheck myscript No issues detected!

实际脚本是:

#!/bin/bash
show_root_menu(){
width=72
height=50
menu_height=8
backtitle="Installer-menu"
title="Setup opions"
menu="Choose one of the following options:"

options=(1 'Add Mint PPA and update' 
         2 'Install Cinnamon '
         3 'update and upgrade '
         4 'Additional software installation '
         5 'Upgrade Kernel '
         6 'Resolve Ubuntu Cinnamon issues '
         7 'Install graphic proprietary driver'
         x reboot
         q quit )
    
result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_pckg_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'

options=(1 'Install package list'
         2 'Export package list'
         3 'update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )

result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_solver_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Resolver menu'
menu='Choose one of the following options:'

options=(1 'Network applet problem'
         2 'Sound problem'
         3 'update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )


result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_nvidia_menu(){
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='NVidia driver selection'
menu='Choose one of the following options:'

options=(1 'Install nvidia 515'
         2 'Install nvidia 525'
         3 'Update and upgrade'
         4 'Show root menu'
         x reboot
         q quit )

result=$(dialog --clear \
                --backtitle "$backtitle" \
                --title "$title" \
                --menu "$menu" \
                $height $width $menu_height \
                "${options[@]}" \
                2>&1 >/dev/tty)
}
show_root_menu
case "$result" in
    1)  echo 'Mint backport repos installed';
        apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
        sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
        sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
        apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
        apt update;
        show_root_menu;;
    2)  echo 'Installation of Cinnamon';
        apt install slick-greeter muffin cinnamon;
        show_root_menu;;
    3)  echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_root_menu;;
    4)  show_pckg_menu;;
    5)  sh ubuntu-mainline-kernel.sh;
        show_root_menu;;
    6)  show_solver_menu;;
    7)  show_nvidia_menu;;
    x)  echo Reboot;
        reboot;;
    q)  clear; 
        exit ;;
esac

show_pckg_menu
case "$result" in
     1) echo 'Package Install';
        sh installpkgs.sh;;
     2) echo 'Manualy installed packages exported';
        sh pkgsexport.sh;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_pckg_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; 
        exit ;;
esac

show_solver_menu
case "$result" in
     1) echo 'Applying changes to network settings';
        clear;
        option_picked "Option 1 Picked";
        touch /etc/network/interfaces;
        sh -c 'echo "auto lo" >> /etc/network/interfaces';
        sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
        sh -c 'echo "  renderer: NetworkManager" >> /etc/netplan/*.yaml';
        netplan apply;
        show_solver_menu;;
     2) echo 'Applying changes to sound settings';
        ln -s /usr/share/pipewire /etc/pipewire;
        touch /usr/share/pipewire/media-session.d/with-pulseaudio;
        systemctl --user restart pipewire-session-manager;
        systemctl --user start pulseaudio;
        show_solver_menu;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_solver_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; 
        exit ;;
esac

show_nvidia_menu
case "$result" in
     1) echo 'NVidia driver 515 installation';
        apt install nvidia-driver-515 -y;
        show_nvidia_menu;;
     2) echo 'NVidia driver 525 installation';
        apt install nvidia-driver-525 -y;
        show_nvidia_menu;;
     3) echo 'Package upgrade';
        apt update && apt upgrade -y;
        show_nvidia_menu;;
     4) show_root_menu;;
     x) echo 'Reboot';
        reboot;;
     q) clear; exit ;;
esac
bash
  • 1 1 个回答
  • 23 Views

1 个回答

  • Voted
  1. Best Answer
    Freddy
    2023-01-31T08:57:20+08:002023-01-31T08:57:20+08:00

    在安装程序的末尾,有四个菜单调用show_root_menu、和show_pckg_menu,每个菜单调用都遵循相应的 case 语句。show_solver_menushow_nvidia_menu

    这就是发生的事情:当显示根菜单并且用户按下cancel时,将显示包菜单。按cancel-> 求解器菜单,cancel-> nvidia 菜单,cancel-> 退出(脚本结束)。

    如果您再次启动脚本并按7(nvidia menu),然后按4返回根菜单,则 case 语句丢失并被show_pckg_menu调用。

    修复:仅show_root_menu在脚本末尾调用并将 case 语句移动到它们之后的相应函数中result=$(dialog...)。

    #!/bin/bash
    show_root_menu(){
    width=72
    height=50
    menu_height=8
    backtitle="Installer-menu"
    title="Setup opions"
    menu="Choose one of the following options:"
    
    options=(1 'Add Mint PPA and update' 
             2 'Install Cinnamon '
             3 'update and upgrade '
             4 'Additional software installation '
             5 'Upgrade Kernel '
             6 'Resolve Ubuntu Cinnamon issues '
             7 'Install graphic proprietary driver'
             x reboot
             q quit )
        
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
        1)  echo 'Mint backport repos installed';
            apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
            sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
            sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
            apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
            apt update;
            show_root_menu;;
        2)  echo 'Installation of Cinnamon';
            apt install slick-greeter muffin cinnamon;
            show_root_menu;;
        3)  echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_root_menu;;
        4)  show_pckg_menu;;
        5)  sh ubuntu-mainline-kernel.sh;
            show_root_menu;;
        6)  show_solver_menu;;
        7)  show_nvidia_menu;;
        x)  echo Reboot;
            reboot;;
        q)  clear; 
            exit ;;
    esac
    }
    show_pckg_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='Package options'
    menu='Choose one of the following options:'
    
    options=(1 'Install package list'
             2 'Export package list'
             3 'update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'Package Install';
            sh installpkgs.sh;;
         2) echo 'Manualy installed packages exported';
            sh pkgsexport.sh;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_pckg_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; 
            exit ;;
    esac
    }
    show_solver_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='Resolver menu'
    menu='Choose one of the following options:'
    
    options=(1 'Network applet problem'
             2 'Sound problem'
             3 'update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'Applying changes to network settings';
            clear;
            option_picked "Option 1 Picked";
            touch /etc/network/interfaces;
            sh -c 'echo "auto lo" >> /etc/network/interfaces';
            sh -c 'echo "iface lo inet loopback" >> /etc/network/interfaces';
            sh -c 'echo "  renderer: NetworkManager" >> /etc/netplan/*.yaml';
            netplan apply;
            show_solver_menu;;
         2) echo 'Applying changes to sound settings';
            ln -s /usr/share/pipewire /etc/pipewire;
            touch /usr/share/pipewire/media-session.d/with-pulseaudio;
            systemctl --user restart pipewire-session-manager;
            systemctl --user start pulseaudio;
            show_solver_menu;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_solver_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; 
            exit ;;
    esac
    }
    show_nvidia_menu(){
    width=72
    height=22
    menu_height=8
    backtitle='Installer-menu'
    title='NVidia driver selection'
    menu='Choose one of the following options:'
    
    options=(1 'Install nvidia 515'
             2 'Install nvidia 525'
             3 'Update and upgrade'
             4 'Show root menu'
             x reboot
             q quit )
    
    result=$(dialog --clear \
                    --backtitle "$backtitle" \
                    --title "$title" \
                    --menu "$menu" \
                    $height $width $menu_height \
                    "${options[@]}" \
                    2>&1 >/dev/tty)
    
    case "$result" in
         1) echo 'NVidia driver 515 installation';
            apt install nvidia-driver-515 -y;
            show_nvidia_menu;;
         2) echo 'NVidia driver 525 installation';
            apt install nvidia-driver-525 -y;
            show_nvidia_menu;;
         3) echo 'Package upgrade';
            apt update && apt upgrade -y;
            show_nvidia_menu;;
         4) show_root_menu;;
         x) echo 'Reboot';
            reboot;;
         q) clear; exit ;;
    esac
    }
    
    show_root_menu
    
    • 0

相关问题

  • 通过命令的标准输出以编程方式导出环境变量[重复]

  • 从文本文件传递变量的奇怪问题

  • 虽然行读取保持转义空间?

  • `tee` 和 `bash` 进程替换顺序

  • 运行一个非常慢的脚本直到它成功

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve