shell 菜单式脚本


Shell 脚本菜单示例

菜单式 Shell 脚本通常包括一个循环,显示菜单选项,等待用户输入,并根据用户选择执行不同的操作。下面是一个简单的示例,它展示了如何创建一个基本的菜单系统,并处理用户输入。

基本结构

以下是一个简单的菜单式 Shell 脚本的基本结构:

#!/bin/bash

# 显示菜单
show_menu() {
    echo "选择一个操作:"
    echo "1. 显示当前日期和时间"
    echo "2. 查看系统信息"
    echo "3. 列出当前目录文件"
    echo "4. 退出"
}

# 执行用户选择的操作
perform_action() {
    case $1 in
        1)
            echo "当前日期和时间:"
            date
            ;;
        2)
            echo "系统信息:"
            uname -a
            ;;
        3)
            echo "当前目录文件列表:"
            ls
            ;;
        4)
            echo "退出"
            exit 0
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

# 主程序
while true; do
    show_menu
    read -p "请输入你的选择 [1-4]: " choice
    perform_action $choice
done

详细讲解

显示菜单 (show_menu 函数)

show_menu 函数负责显示所有可用的操作选项。它使用 echo 命令输出菜单内容。

执行操作 (perform_action 函数)

perform_action 函数根据用户的选择执行不同的操作。它使用 case 语句来匹配用户的选择并执行对应的命令。如果选择无效,脚本会提示用户重新输入。

主程序循环

while true 循环会持续运行,直到用户选择退出。每次循环时,脚本都会显示菜单并读取用户的选择,然后调用 perform_action 函数来执行相应的操作。

扩展功能

你可以根据需求扩展这个脚本。例如,添加更多的菜单选项,执行其他系统管理任务,或者将功能拆分到不同的脚本中。

添加日志功能

log_action() {
    echo "$(date): $1" >> /var/log/menu_script.log
}

perform_action() {
    case $1 in
        1)
            log_action "显示当前日期和时间"
            echo "当前日期和时间:"
            date
            ;;
        2)
            log_action "查看系统信息"
            echo "系统信息:"
            uname -a
            ;;
        3)
            log_action "列出当前目录文件"
            echo "当前目录文件列表:"
            ls
            ;;
        4)
            log_action "退出"
            echo "退出"
            exit 0
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

创建帮助选项

show_help() {
    echo "帮助信息:"
    echo "1. 显示当前日期和时间"
    echo "2. 查看系统信息"
    echo "3. 列出当前目录文件"
    echo "4. 退出"
    echo "5. 显示帮助"
}

perform_action() {
    case $1 in
        1)
            echo "当前日期和时间:"
            date
            ;;
        2)
            echo "系统信息:"
            uname -a
            ;;
        3)
            echo "当前目录文件列表:"
            ls
            ;;
        4)
            echo "退出"
            exit 0
            ;;
        5)
            show_help
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

实用技巧

  • 使用 select 命令: 如果你希望脚本中的菜单更具交互性,可以使用 select 命令,它可以自动生成菜单和处理用户输入。

    PS3="请输入你的选择: "
    options=("显示当前日期和时间" "查看系统信息" "列出当前目录文件" "退出")
    select opt in "${options[@]}"; do
        case $opt in
            "显示当前日期和时间")
                date
                ;;
            "查看系统信息")
                uname -a
                ;;
            "列出当前目录文件")
                ls
                ;;
            "退出")
                break
                ;;
            *) echo "无效选择";;
        esac
    done
    
  • 处理错误: 添加错误处理来增强脚本的鲁棒性,例如处理无效输入或命令失败的情况。


复杂的功能选项

你可以将菜单选项设计得更复杂,涵盖更多的系统操作或自动化任务。例如,添加网络管理、系统监控、用户管理等功能。

示例:

#!/bin/bash

show_menu() {
    echo "选择一个操作:"
    echo "1. 显示当前日期和时间"
    echo "2. 查看系统信息"
    echo "3. 列出当前目录文件"
    echo "4. 网络状态检查"
    echo "5. 磁盘使用情况"
    echo "6. 用户管理"
    echo "7. 退出"
}

perform_action() {
    case $1 in
        1)
            echo "当前日期和时间:"
            date
            ;;
        2)
            echo "系统信息:"
            uname -a
            ;;
        3)
            echo "当前目录文件列表:"
            ls
            ;;
        4)
            echo "网络状态:"
            ifconfig
            ;;
        5)
            echo "磁盘使用情况:"
            df -h
            ;;
        6)
            manage_users
            ;;
        7)
            echo "退出"
            exit 0
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

manage_users() {
    echo "用户管理:"
    echo "1. 显示所有用户"
    echo "2. 添加新用户"
    echo "3. 删除用户"
    echo "4. 返回主菜单"
    read -p "请输入你的选择 [1-4]: " user_choice
    case $user_choice in
        1)
            echo "所有用户:"
            cut -d: -f1 /etc/passwd
            ;;
        2)
            read -p "请输入新用户名: " new_user
            sudo useradd $new_user
            ;;
        3)
            read -p "请输入要删除的用户名: " del_user
            sudo userdel $del_user
            ;;
        4)
            return
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

输入验证和错误处理

在脚本中加入输入验证和错误处理可以提升用户体验和脚本的稳定性。例如,确保用户输入的是有效的选项,处理命令执行失败的情况。

示例:

validate_input() {
    if [[ ! $1 =~ ^[0-9]+$ ]] || [[ $1 -lt 1 ]] || [[ $1 -gt 7 ]]; then
        echo "输入无效,请输入一个有效的选项 [1-7]."
        return 1
    fi
    return 0
}

while true; do
    show_menu
    read -p "请输入你的选择 [1-7]: " choice
    validate_input $choice
    if [[ $? -eq 0 ]]; then
        perform_action $choice
    fi
done

持久化配置

通过配置文件持久化用户设置或脚本状态。例如,记录用户的选择或保存系统状态,以便在下次运行脚本时恢复。

示例:
CONFIG_FILE="$HOME/.menu_script_config"

load_config() {
    if [[ -f $CONFIG_FILE ]]; then
        source $CONFIG_FILE
    else
        echo "没有找到配置文件,使用默认设置。"
    fi
}

save_config() {
    echo "LAST_CHOICE=$1" > $CONFIG_FILE
}

while true; do
    show_menu
    read -p "请输入你的选择 [1-7]: " choice
    validate_input $choice
    if [[ $? -eq 0 ]]; then
        save_config $choice
        perform_action $choice
    fi
done

后台任务和定时任务

实现后台任务和定时任务可以使脚本更强大。例如,安排定时备份,或者运行长时间的任务并将结果发送到用户的邮箱。

示例:

schedule_backup() {
    echo "安排每日备份任务..."
    echo "0 2 * * * /path/to/backup.sh" | sudo tee -a /etc/crontab
    echo "备份任务已安排在每天凌晨2点运行。"
}

perform_action() {
    case $1 in
        1)
            echo "当前日期和时间:"
            date
            ;;
        2)
            echo "系统信息:"
            uname -a
            ;;
        3)
            echo "当前目录文件列表:"
            ls
            ;;
        4)
            schedule_backup
            ;;
        5)
            echo "退出"
            exit 0
            ;;
        *)
            echo "无效选择,请重新输入。"
            ;;
    esac
}

图形界面

对于有 GUI 需求的场景,可以使用 dialogzenity 工具为菜单脚本添加图形界面。

示例(使用 dialog):

#!/bin/bash

show_menu() {
    dialog --title "菜单" --menu "选择一个操作:" 15 50 6 \
        1 "显示当前日期和时间" \
        2 "查看系统信息" \
        3 "列出当前目录文件" \
        4 "退出" \
        2> /tmp/choice.txt
}

perform_action() {
    choice=$(< /tmp/choice.txt)
    case $choice in
        1)
            dialog --msgbox "当前日期和时间:$(date)" 10 50
            ;;
        2)
            dialog --msgbox "系统信息:$(uname -a)" 10 50
            ;;
        3)
            dialog --msgbox "当前目录文件列表:$(ls)" 10 50
            ;;
        4)
            clear
            exit 0
            ;;
        *)
            dialog --msgbox "无效选择,请重新输入。" 10 50
            ;;
    esac
}

while true; do
    show_menu
    perform_action
done

总结

菜单式 Shell 脚本提供了一个简单而有效的方式来组织和执行命令。通过合理设计菜单和功能,脚本可以大大提高工作效率和用户体验。希望这些示例和技巧能帮助你编写自己的菜单式 Shell 脚本。通过扩展菜单式脚本的功能,可以使其变得更加复杂和强大。你可以添加更多的功能选项、进行输入验证和错误处理、实现配置持久化、安排后台任务、甚至使用图形界面工具来提升用户体验。根据实际需求,你可以不断改进和丰富脚本的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XMYX-0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值