read命令使用的基本格式
read命令可以从标准输入中读取一行并将其拆分为字段
read命令读取单个变量:
[wjj@learning ~]$ read name
zhang san
[wjj@learning ~]$ echo $name
zhang san
因为read命令是读取一行的内容,因此空格不会作为分隔符。
read命令还可以读取多个变量(变量中间用空格间隔)例如:
[wjj@learning ~]$ read num num2 num3
111 222 333
[wjj@learning ~]$ echo -e "${num}\n${num2}\n${num3}"
111
222
333
此外,read还有丰富的可添加选项,其格式:read [可添加选项] [变量名],例如:read -a arr。
可添加选项 | 说明 |
---|---|
-a | 把获取的数据赋给数组,数组下标从0开始 |
-d char | 设置一个截至字符char,不会因换行和空格而终止,直到读取到char为止(不包括char) |
-e | 可以使用命令补全键 |
-i text | 使用 text 作为阅读行的初始文本 |
-n num | 设置一个读取字符数num,在读取 num个 字符后返回,而不是等待换行符,但如果在分隔符之前读取的字符少于 NCHARS 字符,则遵循分隔符 |
-N num | 设置一个读取字符数num,在读取num个字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符(与n不同,N必须读够num个字符才会终止) |
-p | 在读取的时候打印指定字符串 |
-r | 不允许转义字符\
|
-s | 输入字符时不打印在终端上(光标也不会动) |
-t time | 设置一个截至时间time,time以秒为单位(超时不会获取任何字符) |
-u fd | 使用文件描述符 fd 作为输入源,而不是标准输入 |
示例
read选项示例
1)-a选项
把获取的数据赋给数组,数组下标从0开始。
[wjj@learning ~]$ read -a num
1 2 3 4
[wjj@learning ~]$ echo -e "${num[0]}\t${num[1]}\t${num[2]}\t${num[3]}"
1 2 3 4
此时,num为一个数组,其中存储了1 2 3 4;shell只支持一维数组
2)-d选项
设置一个截至字符char,不会因换行和空格而终止,直到读取到char为止(不包括char)
[wjj@learning ~]$ read -d x name
zhang sanx
[wjj@learning ~]$ echo ${name}
zhang san
read读取到X时就会停止读取,并且读取内容包括X
3)-e选项
可以使用命令补全键
[wjj@learning ~]$ read -e file
.bash_history .bash_logout .bash_profile .bashrc study/ text.txt .viminfo
可以用过使用tab键查找当前路径下的文件,亦可以使用tab键对文件名称进行补全。
使用 text 作为阅读行的初始文本
4)-n选项
设置一个读取字符数num,在读取 num个 字符后返回,而不是等待换行符,但如果在分隔符之前读取的字符少于 NCHARS 字符,则遵循分隔符。
[wjj@learning ~]$ read -n 10 name
zhangsan
[wjj@learning ~]$ echo $name
zhangsan
设置了读取10个字符,但是读取了8个字符,通过换行符结束读取读取。
5)-N选项
设置一个读取字符数num,在读取num个字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符(与n不同,N必须读够num个字符才会终止)
[wjj@learning ~]$ read -N 10 name
zhangsan
a[wjj@learning ~]$ echo $name
zhangsan a
同样设置读取10个字符,但是换行符并不能终止读取,并且换行符被当作一个空格,直到读满10个字符终止。
6)-p选项
在读取的时候打印指定字符串。
[wjj@learning ~]$ read -p "输入用户名" name
输入用户名zhang san
[wjj@learning ~]$ echo $name
zhang san
7)-r选项
输入时不允许转义字符\
,\
只当作普通字符。
[wjj@learning ~]$ read name
\!
[wjj@learning ~]$ echo $name
!
[wjj@learning ~]$ read -r name
\t
[wjj@learning ~]$ echo $name
\t
8)-s选项
输入字符时不打印在终端上(光标也不会动)。
[wjj@learning ~]$ read -s password
[wjj@learning ~]$ echo $password
12345
9)-t选项
设置一个截至时间time,time以秒为单位(超时不会获取任何字符)
#超时输入的情况,没有及时按enter
[wjj@learning ~]$ read -t 5 phone_num
123456[wjj@learning ~]$ 123456 #read没有读取字符,所以输入的字符跑到命令终端上了
[wjj@learning ~]$ echo $phone_num
#打印不出来任何东西
#正常输入的情况
[wjj@learning ~]$ read -t 5 phone_num
12345
[wjj@learning ~]$ echo $phone_num
12345
10)-u选项
read从文件中读取变量
首先,创建一个文件,里面存储三个人的姓名。
[wjj@learning ~]$ cat > test << "EOF"
> zhangsan
> lisi
> wangwu
> EOF
1)将while放在管道后面,实现逐行读取文件:文章来源:https://www.toymoban.com/news/detail-644591.html
#!/bin/bash
count=0 #计数器
cat test | while read name
do
let count++
echo "第${count}位:${name}"
done
2)只利用while进行循环读取:文章来源地址https://www.toymoban.com/news/detail-644591.html
#!/bin/bash
while read name
do
echo ${name}
done < test
#也可以这样写,赋给多个变量
while read name1 name2 name3
do
echo ${name1} ${name2} ${name3}
done < test
到了这里,关于Shell——read命令的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!