如何修改Bash菜单脚本使其执行后返回菜单而非退出
修改后的Bash菜单脚本
以下是满足你需求的修改版脚本,选中非退出选项后会保留执行结果,按下任意键返回菜单,仅退出选项会终止脚本:
#!/bin/bash HEIGHT=15 WIDTH=40 CHOICE_HEIGHT=4 BACKTITLE="SOULMASK SERVER MENU" TITLE="Title here" MENU="Choose one of the following options:" OPTIONS=(1 "login info" 2 "Soulmask status" 3 "Option 3" 4 "exit") # 循环显示菜单,直到选择exit或取消操作 while true; do CHOICE=$(dialog --clear \ --backtitle "$BACKTITLE" \ --title "$TITLE" \ --menu "$MENU" \ $HEIGHT $WIDTH $CHOICE_HEIGHT \ "${OPTIONS[@]}" \ 2>&1 >/dev/tty) # 用户按ESC取消dialog时,直接退出循环 if [ -z "$CHOICE" ]; then break fi clear case $CHOICE in 1) w ; uptime ;; 2) /usr/bin/systemctl status soulmask ;; 3) who ;; 4) exit 0 ;; esac # 非退出选项执行后,等待用户按键再返回菜单 if [ "$CHOICE" != "4" ]; then echo -e "\n\n按任意键返回菜单..." read -n 1 -s -r fi done
关键修改说明
- 循环包裹:用
while true将菜单选择与逻辑处理全部包裹,实现执行完非退出选项后自动回到菜单的效果。 - 按键等待机制:在非退出选项执行完成后,通过
read -n 1 -s -r命令等待用户按任意键(-n 1读取单个字符、-s不回显输入、-r禁用转义字符),确保执行结果会保留到用户操作后才刷新界面。 - 取消操作处理:增加了对用户取消dialog(如按ESC键)的判断,此时直接终止循环退出脚本,避免无意义的等待。
内容的提问来源于stack exchange,提问作者Sunyata Nothing
相关产品推荐
相关产品推荐

