shell read用法分析_学习笔记

简介: 时间:2017.12.19作者:李强参考:man,info,magedu讲义,万能的internet实验环境:CentOS 6.9与CentOS7.4声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

时间:2017.12.19
作者:李强
参考:man,info,magedu讲义,万能的internet
实验环境:CentOS 6.9与CentOS7.4
声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

读取用户输入:
1、read
read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

read接收的和cat一样是标准输入。他会将接收来自stdin或者从fd中(如果-u选项使用的话)的单独一行,然后每行划分成像单词一样的段。你指定几个变量划分成几个段,以空格为分隔符,目前看是如此。然后把空格分割的段赋值个定义的变量。

[root@centos6 ~]#read x  y 
1x 2y 3z
[root@centos6 ~]#echo $x
1x
[root@centos6 ~]#echo $y
2y 3z
[root@centos6 ~]#

这里我们指定了2个name,然后就会把输入的"1x 2y 3z"这一行,以空格划分成2段,前面是1x,后面是"2y 3z"。然后前面复制给x,后面赋值给y
。如果只指定了x,那么一整行都会赋给x,如果没有指定name,存放在REPLAY变量中

选项:
-p prompt:prompt,提示信息,其后跟name把用户stdin存放到name中
-t timeout :timeout,用户一定时间不输入,就退出程序
-s :不打印来自终端的输入,可用于密码输入,但是回车后并没有换行。
-d delim:以某个定界符来终止变量内容的读取。
-e :
-r :禁止反斜线做为转义符使用,就是单纯的反斜线字符。
-a array
-n nchars
-N nchars

1)、test read
[lq@centos7 ~]$. 5.sh <<eof
> first lne
> second line
> three line  
> last line
> eof
word:first lne
[lq@centos7 ~]$cat 5.sh
#!/bin/bash
#test read word  split
read  word
echo word:$word

如上所示:第一行的内容给了第一个变量word 后面没有指定name,就没了。

2)、#test read  -d  
[lq@centos7 ~]$. 3.sh <<eof
> 123,456
> eof
pwd1:123
pwd2:
[lq@centos7 ~]$cat 3.sh
#!/bin/bash
#test read  -d 
read -d "," -p "输入密码:" pwd1 pwd2
echo -e "pwd1:$pwd1\npwd2:$pwd2"

3)、#test read -r
[lq@centos7 ~]$vi 3.sh
#!/bin/bash
read  -rp "输入密码:" pwd1
echo  "pwd1:$pwd1"
[lq@centos7 ~]$. 3.sh
输入密码:1\n2
pwd1:1\n2
[lq@centos7 ~]$vi 3.sh
#!/bin/bash
#test read -r
#read  -rp "输入密码:" pwd1
read  -p "输入密码:" pwd1
echo  "pwd1:$pwd1"
[lq@centos7 ~]$. 3.sh
输入密码:1\n2
pwd1:1n2           

4)、read -u
while read -u3 i && read -u4 j;do
echo $i $j
done 3<afile 4<bfile

ead -u3 i 的意思是从 3 号 fd (file descriptor,文件描述符) 中读一行数据到 i 变量中, 同理你明白 read -u4 j 的意思
而 3<afile 的意思是重定向 afile 到 3 号 fd 中, 同理你明白 4<bfile
所以,整个代码的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。
这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。
比方说你 afile 的内容是
a
b
c
bfile 的内容是
1
2
3
4
则这段程序就会打印
a 1
b 2
c 3

相关文章
ArkTS基础——Component自定义组件——【坚果派——红目香薰】
ArkTS基础——Component自定义组件——【坚果派——红目香薰】
280 0
|
UED 开发者
通义千问新增文档解析功能,可处理超万页文档
【2月更文挑战第25天】通义千问新增文档解析功能,可处理超万页文档
692 6
通义千问新增文档解析功能,可处理超万页文档
|
11月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
189 1
|
存储 编解码 缓存
购买阿里云服务器如何选择实例?根据业务场景与细分场景选择实例规格
对于很多初次购买阿里云服务器的用户来说,面对众多可选择的云服务器实例规格,往往不知道如何选择,不同实例规格适用于不同的业务场景,本文为大家汇总了不同业务场景和细分场景下应该选择的主要实例规格,以及这些实例规格的主要性能和适用场景,如果你不知道如何选择阿里云服务器的实例规格,不妨根据自己的场景参考本文所推荐的主要实例规格来选择。
购买阿里云服务器如何选择实例?根据业务场景与细分场景选择实例规格
|
10月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
306 4
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
242 0
|
Linux Android开发 iOS开发
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
FFmpeg跨平台支持多系统,包括Linux、macOS、Windows和Android。官方提供[编译指南](https://trac.ffmpeg.org/wiki/CompilationGuide)。在CentOS上,编译涉及安装多个依赖,如NASM、Yasm、libx264、libx265、libfdk_aac等。同样,在EulerOS上,需安装相关工具并分别编译x264、x265和FFmpeg。详细FFmpeg开发内容可参考《FFmpeg开发实战:从零基础到短视频上线》。
347 1
FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg
|
缓存 Java Unix
五种网络IO模型
前言   本文重点在于介绍五种网络IO模型
621 0
|
监控 NoSQL 算法
Redis哨兵机制原理详解
Redis哨兵机制原理详解
Redis哨兵机制原理详解
|
算法 Java UED
深入解析CMS垃圾回收器
在CMS之前的垃圾回收器,要么就是串行垃圾回收方式,要么就是关注系统吞吐量,而 CMS 垃圾回收器的出现,则打破了这个尴尬的局面。
488 0
深入解析CMS垃圾回收器