linux shell 编程:read获取控制台输入、读取文件内容 作者:马育民 • 2025-11-20 11:10 • 阅读:10000 # 介绍 安装某些软件时,中间会停下来,等待我们输入参数,这种功能就是获取控制台输入 `read` 命令,用于 **从标准输入读取用户输入或文件内容** 的核心命令,是实现交互式脚本的关键工具。 # 常见用法 ### 1. 基本读取(读取单行输入) ```bash #!/bin/bash # 读取用户输入并存储到变量中 echo "请输入你的名字:" read name echo "你好,$name!" ``` **运行效果**: ``` 请输入你的名字: Alice 你好,Alice! ``` ### 2. 直接提示(结合 `-p` 选项) 用 `-p` 直接在读取前显示提示信息,无需单独 `echo`: ```bash #!/bin/bash # -p:prompt(提示) read -p "请输入你的年龄:" age echo "你的年龄是:$age 岁" ``` **运行效果**: ``` 请输入你的年龄:25 你的年龄是:25 岁 ``` ### 例子 ```bash #!/bin/bash read -p "请输入第一个数字:" x read -p "请输入第二个数字:" y res=$(($x+$y)) echo "加法结果:$res" ``` # 常用选项 ### 1. `-n`:读取指定长度的字符 限制读取的字符数量,无需按回车: ```bash #!/bin/bash # -n 1:只读取1个字符 read -n 1 -p "请按Y/N确认:" confirm echo -e "\n你选择了:$confirm" ``` **运行效果**: ``` 请按Y/N确认:Y 你选择了:Y ``` ### 2. `-s`:静默读取(隐藏输入,适合密码) 输入内容不显示在终端,用于读取密码或敏感信息: ```bash #!/bin/bash # -s:silent(静默) read -s -p "请输入密码:" password echo -e "\n密码已输入,长度为:${#password}" ``` **运行效果**: ``` 请输入密码: 密码已输入,长度为:6 ``` ### 3. `-t`:设置超时时间 指定读取的超时秒数,超时后自动退出: ```bash #!/bin/bash # -t 5:5秒超时 if read -t 5 -p "请在5秒内输入内容:" input; then echo "你输入的是:$input" else echo -e "\n超时未输入!" fi ``` **运行效果(超时)**: ``` 请在5秒内输入内容: 超时未输入! ``` ### 4. `-d`:指定分隔符(默认是换行) 用指定字符作为输入结束的标志,而非回车: ```bash #!/bin/bash # -d ";":以分号作为结束符 read -d ";" -p "输入内容(以;结束):" content echo "你输入的内容是:$content" ``` **运行效果**: ``` 输入内容(以;结束):Hello World; 你输入的内容是:Hello World ``` # 高级用法 ### 1. 读取多个变量 一次性读取多个值,自动按空格/制表符分隔: ```bash #!/bin/bash read -p "请输入姓名和年龄(空格分隔):" name age echo "姓名:$name,年龄:$age" ``` **运行效果**: ``` 请输入姓名和年龄(空格分隔):Bob 30 姓名:Bob,年龄:30 ``` ### 2. 读取文件内容(逐行读取) 结合循环逐行读取文件内容: ```bash #!/bin/bash # 逐行读取文件 echo "读取文件内容:" while read line; do echo "行内容:$line" done < "test.txt" # 重定向文件到read ``` **test.txt 内容**: ``` 第一行 第二行 第三行 ``` **运行效果**: ``` 读取文件内容: 行内容:第一行 行内容:第二行 行内容:第三行 ``` ### 3. 读取数组(将输入转为数组) 用 `-a` 将输入内容按分隔符存入数组: ```bash #!/bin/bash # -a:array(数组) read -a fruits -p "输入水果名称(空格分隔):" echo "你输入的水果有:${fruits[@]}" echo "第一个水果:${fruits[0]}" ``` **运行效果**: ``` 输入水果名称(空格分隔):苹果 香蕉 橙子 你输入的水果有:苹果 香蕉 橙子 第一个水果:苹果 ``` # 注意事项 1. **输入分隔符**:默认以空格、制表符或换行作为分隔符,读取多个变量时会自动分配。 2. **换行处理**:`read` 默认会忽略末尾的换行符,读取的内容不包含换行。 3. **空输入处理**:如果直接按回车,变量会被设为空字符串,可通过 `if [ -z "$var" ]` 判断。 4. **重定向输入**:除了读取用户输入,还可通过 `< 文件` 读取文件内容。 # 总结 1. **核心功能**:`read` 是 Shell 实现交互式输入的核心命令,支持读取用户输入、文件内容等。 2. **常用选项**:`-p`(提示)、`-s`(静默)、`-t`(超时)、`-n`(长度限制)是最实用的选项。 3. **扩展用法**:可读取多个变量、数组,或结合循环逐行读取文件,满足复杂脚本需求。 原文出处:http://malaoshi.top/show_1GW2GD3dyG56.html