本文目录导读:

在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脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播