6-x1 read命令:从键盘读取数据
1.read的用法
read从 STDIN 读取一行数据并将其赋给一个变量,如果没有进行重定向,默认就是从键盘读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。
read 命令的用法为:
read [-options] [variables]
variables表示用来存储数据的变量,可以有一个,也可以有多个,options表示选项,如下表所示:options和variables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。
|
选项
|
说明
|
|---|---|
| -a array | 把读取的数据赋值给数组 array,从下标 0 开始。 |
| -d delimiter | 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter),其实只有-d后的第一个字符被作为结束的标志 |
| -e |
在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。 比如read -e -p "输入文件名:" str 执行后,输入文件名开头的几个字符,使用tab键可以进行文件名补全(文件在当前目录存在) |
| -n num | 读取 num 个字符,而不是整行字符。空格也算是一个字符 |
| -p prompt | 显示提示信息,提示内容为 prompt。 |
| -r | 原样读取(Raw mode),不把反斜杠字符解释为转义字符。 |
| -s | 静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。 |
| -t seconds | 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。 |
| -u fd | 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。 |
2.举栗
|
功能
|
脚本
|
结果
|
注意点
|
||||||
|---|---|---|---|---|---|---|---|---|---|
| 给多个变量赋值 |
|
运行结果:
|
1.必须在一行内输入所有的值,不能换行,否则只能给第一个变量赋值,后续变量都会赋值失败 2.使用了 3.脚本中-p后的提示字符与变量name之间必须有一个空格,否则变量name会被当成提示信息的一部分 |
||||||
| 只读取一个字符 |
|
运行结果: Enter a char > 1 不使用printf "\n"时的运行结果为Enter a char > 11 |
1.-n 1表示只读取一个字符。运行脚本后,只要用户输入一个字符,立即读取结束,不用等待用户按下回车键。2.printf "\n"语句用来达到换行的效果,否则 echo 的输出结果会和用户输入的内容位于同一行,不容易区分。 |
||||||
| 常见场景用例 |
|
||||||||
| 在指定时间内输入密码 |
|
如果两次输入密码相同,运行结果为: Enter password in 20 seconds(once) > Enter password in 20 seconds(again)> Valid password 如果两次输入密码不同,运行结果为: Enter password in 20 seconds(once) > Enter password in 20 seconds(again)> Invalid password 如果第一次输入超时,运行结果为: Enter password in 20 seconds(once) > Invalid password 如果第二次输入超时,运行结果为: Enter password in 20 seconds(once) > Enter password in 20 seconds(again)> Invalid password |
1. |
||||||
| 把读取的数据赋值给一个数组 |
|
|
|||||||
| -d |
read -d delimiter -p 'please input data>' test_var 输出:please input data>test432d echo $test_var 输出:test432 |
1.使用-d指定分隔符后,只有-d后的第一个字符被作为结束标志 | |||||||
|
等待输出q退出 |
read -dq -p "Input some words end with q:" word |
#输入,直到输入q,将自动退出 | |||||||
| -e |
read -e -p "please input filename:" str 输出:please input filename:learn_ #按tab键 learn_arr.sh learn_cmd.sh learn_read1.sh learn_read.sh learn_spe_var.sh learn_str.sh #显示出所有相关的文件 继续输出:please input filename:learn_ |
||||||||
| 读文件中的内容 |
|
|
|||||||
|
-u 使用文件描述符 fd 作为输入源,而不是标准输入 |
#将afile文件中的前三行与bfile中的前四行拼接在一起
|
|
read -u3 i 的意思是从 3 号 fd (file descriptor,文件描述符) 中读一行数据到 i 变量中,而 3<afile 的意思是重定向 afile 到 3 号 fd 中 所以,整个代码的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。 这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。 |
6-x1 read命令:从键盘读取数据的更多相关文章
- Java:IO流的综合用法(从键盘录入数据并打印在控制台上)
import java.io.*; public class IOTestDouble { public static void main(String[] args)throws Exception ...
- 问题:从键盘读取特定类型的数据(使用Scanner读取int类型)
import java.util.Scanner; public class ScannerIntTest{ public static void main(String [] args){ int ...
- c和c++中读取数据的方式总结
目录 c 输出 printf() 输入 scanf getchar(), putchar() gets(), puts() c++ 输入 cin() getline() get() 输出 cout 最 ...
- ubuntu server 12.04U盘安装,提示无法挂载安装光盘或光盘读取数据出错
今天用Ultraiso将Ubuntu server 12.04 刻入U盘中安装系统,中间提示错误:1.检测不到cdrom(即U盘没有挂载上):2.从光盘中读取数据出错.问题如下图所示: 上网搜了下解决 ...
- 【转】基本数据持久性(一) 使用plist保存和读取数据
原文网址:http://www.it165.net/pro/html/201309/7170.html 想保存成绩.记录得分.保存账号密码等等?数据持久性可以做到这一点!这篇文章通过简单的程序,来分享 ...
- Redis 中文入库成功,读取数据写入文件乱码问题
近期须要用到redis ,可是在编码这个问题上,纠结了非常久. 需求 :每天一个进程将中文文件入库到redis中(不定时更新) ,另外几个进程读取redis中的信息 ,并处理数据结果.使 ...
- Hadoop权威指南:从Hadoop URL读取数据
[TOC] Hadoop权威指南:从Hadoop URL读取数据 使用java.net.URL对象从Hadoop文件系统读取文件 实现类似linux中cat命令的程序 文件名 HDFSCat.java ...
- bash内置命令mapfile:读取文件内容到数组
bash提供了两个内置命令:readarray和mapfile,它们是同义词.它们的作用是从标准输入读取一行行的数据,然后每一行都赋值给一个数组的各元素.显然,在shell编程中更常用的是从文件.从管 ...
- 第十二节,TensorFlow读取数据的几种方法以及队列的使用
TensorFlow程序读取数据一共有3种方法: 供给数据(Feeding): 在TensorFlow程序运行的每一步, 让Python代码来供给数据. 从文件读取数据: 在TensorFlow图的起 ...
随机推荐
- 安装JDK 常见错误解决(Day_07)
在cmd中输入java -version或者java 或出现以下错误: 原因一:可能是你的JDK装的时间比较早,导致环境变量中的Path(此电脑->右击属性->高级系统设置->环境变 ...
- [论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks
[论文阅读笔记] Adversarial Learning on Heterogeneous Information Networks 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问 ...
- Dubbo-admin安装测试
1.下载dubbo-admin 下载地址 2.解压到本地 3.在项目目录下打包dubbo-admin 使用命令 mvn clean package -Dmaven.test.skip=true 第一次 ...
- Step By Step(Lua数据结构)
Step By Step(Lua数据结构) Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础.如数组.记录.线性表.队列和集合等,在Lua中都可以通过table来表示. ...
- 保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事
保护嵌入式802.11 Wi-Fi设备时需要考虑的10件事 10 things to consider when securing an embedded 802.11 Wi-Fi device 随着 ...
- 菜鸟刷题路:剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 class Solution { public int[] reversePrint(ListNode head) { Stack<Integer&g ...
- 【NX二次开发】分析曲线某位置的信息 UF_MODL_ask_curve_props
分析曲线某位置的信息:点.切线.主副法线.半径等 extern DllExport void ufsta(char *param, int *returnCode, int rlen) { UF_in ...
- 08:'my_tag' is not a registered tag library. Must be one of
确保每次修改模板标签时都重新启动 Django 开发服务器(或确保它自己重新启动).如果服务器没有重新启动,Django 将不会注册标签. 从 django 1.9 开始,您可以在如下设置中加载这些新 ...
- Java中,一个存在十几年的bug...
今天,分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年.经过测试,我们发现从JDK8到14都存在这个问题. 大家可以在自己 ...
- Spring事务管理详解
事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...