Linux之read命令详解

这篇博客介绍了Linux shell脚本中read命令的用法,包括读取标准输入、设置选项如-p、-n、-t、-e等,以及如何与文件描述符结合使用。示例展示了如何通过read命令实现用户交互,如等待输入、隐藏输入和文件名补全功能。同时,文章还提到了如何通过管道将cat命令的输出传递给read命令,用于读取文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注: 部分概念介绍来源于网络

简介:
接收键盘或其它文件描述符的输入。read 命令接收标准输入(键盘)的输入,或者其他文件描述符的输入。得到输入后,read 命令将数据放入一个标准变量中。

read 命令格式如下:
#read [选项] [变量名]

选项:
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,字符数:read命令只接收指定的字符数就会执行;。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码,隐藏输入的数据。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
变量名可以自定义。如果不指定变量名,则会把输入保存到默认变量REPLY中;
如果只提供了一个变量名,则将整个输入行赋予该变量;
如果提供了一个以上的变量名,则输入行分为若干字,一个接一个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字;

read -t 30 -p "请输入姓名,等待30秒" name
read -s -t 30 -p "请输入姓名,等待30秒,隐藏输入" name
read -n 1 -t 30 -p "无需按回车,输入一个字符就会执行" gender
read -e -p "输入文件名:" str 
输入文件名:a
a.out    a.py     a.pyc    abc.txt  
使用 -e 参数时输入字符 a 后按下 Tab 键就会输出相关的文件名(该目录存在的)补全命令

读取文件
每次调用 read 命令都会读取文件中的 "一行" 文本。当文件没有可读的行时,read 命令将以非零状态退出。
通过什么样的方法将文件中的数据传给 read 呢?使用 cat 命令并通过管道将结果直接传送给包含 read 命令的 while 命令。
#!/bin/bash
count=1    # 赋值语句,不加空格
cat test.txt | while read line      # cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
   echo "Line $count:$line"
   count=$[ $count + 1 ]          # 注意中括号中的空格。
done
echo "finish"
exit 0
 

Linux read命令用于从标准输入读取数值。它可以用来读取键盘输入,也可以通过重定向读取文件中的一行数据。在shell脚本中,read命令常用于输入自定义变量值。\[2\] 在给出的示例中,read命令被用于从文件中读取一行数据。通过使用cat命令将文件的内容传送给包含read命令的while循环,每次循环读取文件中的一行数据,并将其存储在变量line中。然后,可以对读取的数据进行处理,如在示例中使用echo命令输出行号和行内容。\[1\]\[3\] 需要注意的是,在shell脚本中使用read命令时,可以通过重定向将文件中的内容传递给read命令,也可以直接在命令行下输入数据。\[2\] #### 引用[.reference_title] - *1* [Linuxread命令详解](https://blog.csdn.net/jsugs/article/details/123423644)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Linux命令read命令](https://blog.csdn.net/carefree2005/article/details/115305175)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值