shell脚本-read-输入

1.基础

最简单的用法是不带任何参数,直接读取用户输入,默认存入内置变量 REPLY 中。

bash 复制代码
#!/bin/bash
echo "请输入一段话:"
read  # 等待用户输入
echo "你输入的是:$REPLY"

2. 带提示符与变量赋值

实际开发中,我们通常会指定变量名来存储输入,并使用 -p 选项直接显示提示信息,这样比先用 echo 打印提示更简洁。

bash 复制代码
#!/bin/bash
read -p "请输入你的名字: " name
read -p "请输入你的年龄: " age
echo "你好,$name!你今年 $age 岁。"

3. 静默输入(适合密码)

需要输入密码等敏感信息,不希望屏幕显示输入内容,可以使用 -s 选项。

bash 复制代码
#!/bin/bash
read -sp "请输入密码: " passwd
echo  # 这里加一个换行,否则光标会紧跟在密码后面
echo "密码已输入完毕(为了安全,这里不显示明文)"

4. 限制输入时间与字符数

场景 A:限时回答 使用 -t 选项可以设置等待时间(秒)。如果用户在规定时间内没有输入,脚本会自动继续执行。

bash 复制代码
#!/bin/bash
if read -t 3 -p "请在3秒内回答 (y/n): " answer; then
    echo "你的选择是: $answer"
else
    echo "时间到,已默认选择否。"
fi

场景 B:只读取特定字符 使用 -n 选项可以限制读取的字符数量。例如,只需要用户按一个键来确认。

bash 复制代码
#!/bin/bash
read -n1 -p "是否继续?(y/n): " choice
echo  # 换行
if [ "$choice" = "y" ]; then
    echo "继续执行..."
else
    echo "操作取消。"
fi

5. 高级用法:数组与分隔符

场景 A:读取为数组 如果你希望用户输入一串用空格分隔的内容(如多个文件名),可以使用 -a 将其存入数组。

bash 复制代码
#!/bin/bash
read -a file_list -p "请输入要处理的文件名(空格分隔): "
echo "你选择了 ${#file_list[@]} 个文件:"
for file in "${file_list[@]}"; do
    echo " - $file"
done

场景 B:自定义结束符 默认情况下,read 遇到回车键(换行符)才结束。使用 -d 可以指定其他字符作为结束标志。例如,以 # 号结束输入。

bash 复制代码
#!/bin/bash
read -d '#' -p "请输入文本(以 # 号结束输入): " content
echo
echo "你输入的内容是: $content"

总结:常用选项

选项 作用 典型场景
-p "提示" 显示提示信息 通用的输入交互
-s 静默输入(不回显) 输入密码、密钥
-t 5 设置超时时间(秒) 防止脚本长时间挂起
-n 1 限制读取字符数 简单的 yes/no 选择
-a arr 将输入存入数组 批量处理多个参数
-r 原始模式(不转义 \ 输入包含路径或特殊符号

特别提示:读取文件

除了读取键盘,read 还常用于逐行读取文件 。通常结合 while 循环使用,这是处理文本文件(如配置文件)的常用技巧:

bash 复制代码
# 读取文件内容
while read line; do
    echo "处理行: $line"
done < filename.txt
相关推荐
蓝速科技1 小时前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享
H_oRIZoN_2 小时前
Linux入门DAY41(51 单片机 串口与通信协议)
linux·运维·单片机
小马同学-4 小时前
OpenStack 使用实战:Web 界面与 CLI 命令行实验
运维·云计算·openstack
GeW4 小时前
RHCE备考别瞎学!按这个计划走,30天提高通过率,快速拿证
linux
Escalating_xu4 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
傲世仙尊4 小时前
System V 进程间通信详解:共享内存、消息队列与信号量(CSDN博客)
linux·开发语言·c++
码农小韩4 小时前
Linux应用开发(六)——进程间通信
linux·linux驱动·嵌入式软件开发·嵌入式操作系统·linux应用
网安老伯4 小时前
都2026年了,还在问网络安全怎么入门?看完这一篇你就懂了
运维·计算机网络·web安全·网络安全·wireshark·密码学·网络攻击模型
小祺先生5 小时前
mt7921 debian系统 如何安装驱动
运维·网络·debian
笨笨饿5 小时前
#138_解决Codex要五次回复的问题
linux·stm32·单片机·嵌入式硬件·mcu·物联网·嵌入式实时数据库