本文目录导读:

在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脚本。