曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4983|回复: 0
打印 上一主题 下一主题

read --读取输入到变量

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2010-2-6 22:21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
read 可以从键盘或文件的某一行文本中读入信息,并将其赋值给一个变量。这里分为几种情况:

1、如果只指定一个变量,那么 read 会将所有的输入(回车之前的内容(包括空格))读入到变量中,如
[beyes@beyes-groad ~]$ read name
hello i am beyes
[beyes@beyes-groad ~]$ echo $name
hello i am beyes

2、给出两个变量,各赋给每个变量一个值
:
[beyes@beyes-groad ~]$ read name surname
beyes wang
[beyes@beyes-groad ~]$ echo $name
beyes
[beyes@beyes-groad ~]$ echo $surname
wang
上面,要赋给变量的两个值是用空格符隔开的两个字符串。

3、给出两个变量,有多个用空格符隔开的字符串作为输入值
[beyes@beyes-groad ~]$ read name surname
beyes wang king
[beyes@beyes-groad ~]$ echo $name
beyes
[beyes@beyes-groad ~]$ echo $surname
wang king
由上可见,第一个字符串被赋给了 $name 变量;而此后剩下的所有内容都被赋给了第 2 个变量

4、使用 -p 参数
-p 参数表示读取任何输入之前,在标准错误显示提示 prompt,末尾没有新行符。提示只有在输入来自终端时才会显示。示例代码:
#!/bin/sh

read-p "Enter your choie: [y/n]"input
a=${input:=y}
echo "your choice is: $a"
当运行 read 一行时,先输出提示信息,后面的 input 是隐含接受输入的一个变量。
如果直接按下回车,那么 input 为空,那么根据表达式,input 被赋值为 y,所以 a 也为 y。否则,a 为输入的值。

关于脚本中字符串处理见:http://www.groad.net/bbs/read.php?tid-2323.html


5、-n 参数
-n 参数用来指定最多可读入多少个字符,如果输入的字符少于 n 并按下回车,那么读取到的是输入的字符;如果输入的字符等于n(无法输出大于n,因为会马上返回),则读取动作自动返回:



[Bash shell] 纯文本查看 复制代码
#!/bin/sh
echo
echo -en "\t\tEnter your choice: "
read -n 3 option


echo "your choice is: $option"



6. -s 选项以非回显方式读入
非回显方式读入往往用于密码输入场合,比如:
[Bash shell] 纯文本查看 复制代码
#!/bin/sh

read -s瀀愀猀猀

echo "your password is $pass"


7. -t 选项设定超时读入
-t 选项指定一个超时时间,如果在该时间内没有按下回车确认你的输入,那么 read 不读入你所敲的内容,如:
read -t 3 pass
上面指定 3s 超时时间。

8. -d 选项指定界定符
-d 选项后接一个符号表示界定符,当读入的内容遇到该符号时,输入自动断开,即无需按下回车确认就能读入界定符前面的内容,如:
read -d ":" pass
如果我们输入 groad:net ,那么变量 pass 里的内容将是 groad 。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-19 03:28 , Processed in 0.083195 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表