-
Notifications
You must be signed in to change notification settings - Fork 0
/
read命令
228 lines (126 loc) · 5.93 KB
/
read命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
##########################################
#################read命令#################
##########################################
read: read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]
从标准输入读取一行并将其分为不同的域。
从标准输入读取单独的一行,或者如果使用了 -u 选项,从文件描
述 FD 中读取。该行被分割成域,如同词语分割一样,并且
第一个词被赋值给第一个 NAME 变量,第二个词被赋值给第二个
NAME 变量,如此继续,直到剩下所有的词被赋值给最后一个
NAME 变量。只有 $IFS 变量中的字符被认作是词语分隔符。
如果没有提供 NAME 变量,则读取的行被存放在 REPLY 变量中。
选项:
-a array 将词语赋值给 ARRAY 数组变量的序列下标成员,从
零开始。
-d delim 持续读取直到读入 DELIM 变量中的第一个字符,而不是
换行符
-e 在一个交互式 shell 中使用 readline 获取行
-i text 使用 TEXT 文本作为 readline 的初始文字
-n nchars 读取 nchars 个字符之后返回,而不是等到读取
换行符,但是分隔符仍然有效,如果遇到分隔符之前读
取了不足 nchars 个字符
-N nchars 在准确读取了 nchars 个字符之后返回,除非遇到
了文件结束符或者读超时,任何的分隔符都被忽略
-p prompt 在尝试读取之前输出 PROMPT 提示符并且不带
换行符
-r 不允许反斜杠转义任何字符
-s 不显示终端的任何输入
-t timeout 如果在 TIMEOUT 秒内没有读取一个完整的行则
超时并且返回失败。TMOUT 变量的值是默认的超时时间。
TIMEOUT 可以是小数。如果 TIMEOUT 是0,那么仅当在
指定的文件描述符上输入有效的时候,read 才返回成功。
如果超过了超时时间,则返回状态码大于128
-u fd 从文件描述符 FD 中读取,而不是标准输入
退出状态:
返回码为零,除非遇到了文件结束符,读超时,或者无效的文
件描述符作为参数传递给了 -u 选项。
readarray: readarray [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组]
从一个文件中读取行到数组变量中
一个 `mapfile'的同义词。
readonly: readonly [-aAf] [name[=value] ...] or readonly -p
标记 shell 变量为不可改变。
标记每一个 NAME 名称为只读;这些 NAME 变量的值将不可以被后续的赋值
操作所改变。如果提供了 VALUE,则在标记为只读之前将 VALUE 值赋给变量。
选项:
-a 指下标数组变量
-A 指关联数组标量
-f 指 shell 函数
-p 显示只读变量和函数列表
`--' 的参数禁用进一步的选项处理。
退出状态:
返回成功,除非使用了无效的选项或者 NAME 名称。
whwu@master:~/script/test> cat read_example1.sh
#!/bin/bash
echo -n "Enter your name:" #参数-n的作用是不换行,echo默认是换行
read name #从键盘输入
echo "hello $name, welcome to my program"
exit 0
whwu@master:~/script/test> ./read_example1.sh
Enter your name:bai
hello bai, welcome to my program
-p参数
由于read命令提供了-p参数,允许在read命令行中直接指定一个提示。
whwu@master:~/script/test> cat read_example2.sh
#!/bin/bash
read -p "Enter your name:" name
echo "hello $name, weclome to my program"
exit 0
whwu@master:~/script/test> ./read_example2.sh
Enter your name:bao
hello bao, weclome to my program
-t参数
-t参数给用户的输入做限时规定。若超出-t参数后所规定的时间值后,
脚本将终止用户的输入,可单独使用也可和其它参数配合连用。
whwu@master:~/script/test> cat read_example3.sh
#!/bin/bash
TIP="Input your information(name and sex):"
read -t 10 -p "$TIP" name sex
echo $name
echo $sex
whwu@master:~/script/test> ./read_example3.sh
Input your information(name and sex):bao male
bao
male
whwu@master:~/script/test> ./read_example3.sh #10秒内没有输入
Input your information(name and sex):
whwu@master:~/script/test>
-n参数
参数-n规定read后面的变量所接收的字符个数。只要在shell界面输入到-n所规定的字符数之后,shell变量立即被赋值。
whwu@master:~/script/test> cat read_example4.sh
#!/bin/bash
TIP="Input your information:"
read -n 5 -p "$TIP" name
echo $name
whwu@master:~/script/test> ./read_example4.sh
Input your information:12
12
whwu@master:~/script/test> ./read_example4.sh
Input your information:1234512345
-s参数
有时会需要脚本用户输入,但不希望输入的数据显示在监视器上。如用户密码等。
-s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)。
whwu@master:~/script/test> cat read_example5.sh
#!/bin/bash
TIP="Input your infrmation:"
read -s -p "$TIP" name
echo ""
echo $name
whwu@master:~/script/test> ./read_example5.sh
Input your infrmation:
qwe
shell read 命令除可以从标准输入流中读取字符串给变量外,还能从特定的文件中向变量赋值文件中的“一行内容”。
每次给变量赋值为管道内容的输入的行内容。
whwu@master:~/script/test> cat read_example6.sh
#!/bin/bash
countnum=1
cat 1.txt | while read line
do
echo "$countnum line content: $line"
countnum=$[ $countnum + 1]
done
whwu@master:~/script/test> ./read_example6.sh
1 line content: 123 google
2 line content: baidu 123 123
3 line content: i lovae shell 123 apple
4 line content: haha
http://blog.csdn.net/liuxincumt/article/details/6202295