Shell脚本如何实现交互式输入

wen 实用脚本 1

本文目录导读:

Shell脚本如何实现交互式输入

  1. 使用 read 命令(最常用)
  2. 使用 case 实现选择菜单
  3. 使用 select 创建交互式菜单
  4. 实现确认提示
  5. 输入验证
  6. 多字段输入(用分隔符)
  7. 实用示例:交互式安装脚本
  8. 输入操作的通用函数

在Shell脚本中实现交互式输入有多种方法,以下是常用的几种方式:

使用 read 命令(最常用)

基本用法

#!/bin/bash
echo "请输入你的名字:"
read name
echo "你好,$name!"

带提示信息的 read

read -p "请输入你的年龄:" age
echo "你的年龄是 $age 岁"

读取密码(隐藏输入)

read -s -p "请输入密码:" password
echo "密码已保存"

设置超时

if read -t 5 -p "请在5秒内输入(超时将使用默认值):" input; then
    echo "你输入了:$input"
else
    echo "超时,使用默认值"
    input="default"
fi

限制输入长度

read -n 1 -p "请按任意键继续..." key
echo -e "\n继续执行..."

使用 case 实现选择菜单

#!/bin/bash
echo "请选择操作:"
echo "1. 查看系统信息"
echo "2. 查看磁盘使用"
echo "3. 查看内存使用"
echo "4. 退出"
read -p "请输入选项[1-4]:" choice
case $choice in
    1)
        echo "系统信息:"
        uname -a
        ;;
    2)
        echo "磁盘使用:"
        df -h
        ;;
    3)
        echo "内存使用:"
        free -h
        ;;
    4)
        echo "退出程序"
        exit 0
        ;;
    *)
        echo "无效选项"
        ;;
esac

使用 select 创建交互式菜单

#!/bin/bash
PS3="请选择操作(输入数字):"
options=("查看系统信息" "查看磁盘使用" "查看内存使用" "退出")
select opt in "${options[@]}"
do
    case $opt in
        "查看系统信息")
            echo "系统信息:"
            uname -a
            ;;
        "查看磁盘使用")
            echo "磁盘使用:"
            df -h
            ;;
        "查看内存使用")
            echo "内存使用:"
            free -h
            ;;
        "退出")
            echo "再见!"
            break
            ;;
        *)
            echo "无效选项 $REPLY"
            ;;
    esac
done

实现确认提示

#!/bin/bash
confirm() {
    read -p "$1 [y/n]:" -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        return 0
    else
        return 1
    fi
}
if confirm "确定要删除文件吗?"; then
    echo "文件已删除"
else
    echo "取消删除"
fi

输入验证

#!/bin/bash
while true; do
    read -p "请输入一个数字:" number
    # 检查是否为数字
    if [[ $number =~ ^[0-9]+$ ]]; then
        echo "有效的数字:$number"
        break
    else
        echo "输入无效,请输入数字"
    fi
done
# 检查是否为有效的IP地址
while true; do
    read -p "请输入IP地址:" ip
    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        echo "有效的IP地址:$ip"
        break
    else
        echo "IP格式不正确"
    fi
done

多字段输入(用分隔符)

#!/bin/bash
read -p "请输入姓名、年龄、城市(用空格分隔):" name age city
echo "姓名:$name"
echo "年龄:$age"
echo "城市:$city"

实用示例:交互式安装脚本

#!/bin/bash
echo "=== 软件安装程序 ==="
# 安装路径
read -p "请输入安装路径 [/usr/local/myapp]:" install_path
install_path=${install_path:-/usr/local/myapp}
# 创建用户
read -p "是否创建专用用户?[Y/n]:" create_user
if [[ $create_user =~ ^[Yy]$ ]] || [[ -z $create_user ]]; then
    read -p "请输入用户名:" username
    useradd -m -s /bin/bash $username
fi
# 配置选项
echo "请选择配置模式:"
select config_mode in "开发环境" "生产环境" "自定义" "取消"
do
    case $config_mode in
        "开发环境")
            echo "配置为开发环境..."
            # 配置逻辑
            break
            ;;
        "生产环境")
            echo "配置为生产环境..."
            # 配置逻辑
            break
            ;;
        "自定义")
            read -p "请输入端口号 [8080]:" port
            port=${port:-8080}
            read -p "请输入数据库地址:" db_host
            read -p "请输入数据库名称:" db_name
            read -s -p "请输入数据库密码:" db_pass
            echo
            break
            ;;
        "取消")
            echo "安装取消"
            exit 1
            ;;
        *)
            echo "无效选项"
            ;;
    esac
done
echo "安装配置完成"
echo "安装路径: $install_path"
echo "配置模式: $config_mode"

输入操作的通用函数

#!/bin/bash
# 通用输入函数
get_input() {
    local prompt="$1"
    local default="$2"
    local input
    if [[ -n $default ]]; then
        read -p "$prompt [$default]:" input
        echo "${input:-$default}"
    else
        read -p "$prompt:" input
        echo "$input"
    fi
}
# 通用确认函数
confirm_action() {
    local prompt="$1"
    local default="${2:-n}"
    read -p "$prompt [Y/n]:" -n 1 reply
    echo
    if [[ -z $reply ]]; then
        reply=$default
    fi
    [[ $reply =~ ^[Yy]$ ]]
}
# 使用示例
name=$(get_input "请输入姓名" "张三")
echo "姓名: $name"
if confirm_action "是否继续?"; then
    echo "继续执行..."
fi

这些方法可以根据实际需求灵活组合使用,创建更加友好的交互式Shell脚本。

抱歉,评论功能暂时关闭!