shell 利用read与键盘进行交互, 来取得变量的值
来源:百度文库 编辑:神马文学网 时间:2024/04/28 01:52:59
shell 利用read与键盘进行交互, 来取得变量的值
使用read来进行变量分配1 #!/bin/bash2 # "Reading" 变量.34 echo -n "Enter the value of variable 'var1': "5 # -n 选项, 阻止换行.67 read var18 # 注意: 在var1前面没有'$', 因为变量正在被设置.910 echo "var1 = $var1"111213 echo1415 # 一个单独的'read'语句可以设置多个变量.16 echo -n "Enter the values 'var2' and 'var3' (separated by a space or tab):"17 read var2 var318 echo "var2 = $var2 var3 = $var3"19 # 如果你只输入了一个值, 那么其他的变量还是处于未设置状态(null).2021 exit 0
一个不带变量参数的read命令, 将会把来自键盘的输入存入到专用变量$REPLY中.
例子 11-4. 当使用一个不带变量参数的read命令时, 将会发生什么?
1 #!/bin/bash2 # read-novar.sh34 echo56 # -------------------------- #7 echo -n "Enter a value: "8 read var9 echo "\"var\" = "$var""10 # 到这里为止, 都与期望的一样.11 # -------------------------- #1213 echo1415 # ------------------------------------------------------------------- #16 echo -n "Enter another value: "17 read # 没有变量分配给'read'命令, 所以...18 #+ 输入将分配给默认变量, $REPLY.19 var="$REPLY"20 echo "\"var\" = "$var""21 # 这部分代码和上边的代码等价.22 # ------------------------------------------------------------------- #2324 echo2526 exit 0
一般的, 当输入给read时, 输入一个\, 然后回车, 将会阻止产生一个新行. -r
选项将会让 \ 转义.
例子 11-5. read命令的多行输入
1 #!/bin/bash23 echo45 echo "Enter a string terminated by a \\, then press."6 echo "Then, enter a second string, and again press ."7 read var1 # 当 read $var1 时, "\" 将会阻止产生新行.8 # first line 9 # second line1011 echo "var1 = $var1"12 # var1 = first line second line1314 # 对于每个以 "\" 结尾的行,15 #+ 你都会看到一个下一行的提示符, 让你继续向var1输入内容.1617 echo; echo1819 echo "Enter another string terminated by a \\ , then press ."20 read -r var2 # -r 选项会让 "\" 转义.21 # first line2223 echo "var2 = $var2"24 # var2 = first line2526 # 第一个 就会结束var2变量的录入.2728 echo2930 exit 0
read命令有些有趣的选项, 这些选项允许打印出一个提示符, 然后在不输入ENTER的情况下, 可以读入你所按下的字符的内容.
1 # 不敲回车, 读取一个按键字符.23 read -s -n1 -p "Hit a key " keypress4 echo; echo "Keypress was "\"$keypress\""."56 # -s 选项意味着不打印输入.7 # -n N 选项意味着只接受N个字符的输入.8 # -p 选项意味着在读取输入之前打印出后边的提示符.910 # 使用这些选项是有技巧的, 因为你需要用正确的顺序来使用它们.11
read命令的-n
选项也可以检测方向键, 和一些控制按键.
例子 11-6. 检测方向键
1 #!/bin/bash2 # arrow-detect.sh: 检测方向键, 和一些非打印字符的按键.3 # 感谢, Sandro Magi, 告诉了我们怎么做到这点.45 # --------------------------------------------6 # 按键所产生的字符编码.7 arrowup='\[A'8 arrowdown='\[B'9 arrowrt='\[C'10 arrowleft='\[D'11 insert='\[2'12 delete='\[3'13 # --------------------------------------------1415 SUCCESS=016 OTHER=651718 echo -n "Press a key... "19 # 如果不是上边列表所列出的按键, 可能还是需要按回车. (译者注: 因为一般按键是一个字符)20 read -n3 key # 读取3个字符.2122 echo -n "$key" | grep "$arrowup" # 检查输入字符是否匹配.23 if [ "$?" -eq $SUCCESS ]24 then25 echo "Up-arrow key pressed."26 exit $SUCCESS27 fi2829 echo -n "$key" | grep "$arrowdown"30 if [ "$?" -eq $SUCCESS ]31 then32 echo "Down-arrow key pressed."33 exit $SUCCESS34 fi3536 echo -n "$key" | grep "$arrowrt"37 if [ "$?" -eq $SUCCESS ]38 then39 echo "Right-arrow key pressed."40 exit $SUCCESS41 fi4243 echo -n "$key" | grep "$arrowleft"44 if [ "$?" -eq $SUCCESS ]45 then46 echo "Left-arrow key pressed."47 exit $SUCCESS48 fi4950 echo -n "$key" | grep "$insert"51 if [ "$?" -eq $SUCCESS ]52 then53 echo "\"Insert\" key pressed."54 exit $SUCCESS55 fi5657 echo -n "$key" | grep "$delete"58 if [ "$?" -eq $SUCCESS ]59 then60 echo "\"Delete\" key pressed."61 exit $SUCCESS62 fi636465 echo " Some other key pressed."6667 exit $OTHER6869 # 练习:70 # -----71 # 1) 使用'case'结构来代替'if'结构,72 #+ 这样可以简化这个脚本.73 # 2) 添加 "Home", "End", "PgUp", 和 "PgDn" 这些按键的检查.
对于read命令来说, -n
选项不会检测ENTER(新行)键.
read命令的-t
选项允许时间输入(参考例子 9-4).
read命令也可以从重定向的文件中"读取"变量的值. 如果文件中的内容超过一行, 那么只有第一行被分配到这个变量中. 如果read命令的参数个数超过一个, 那么每个变量都会从文件中取得一个分配的字符串作为变量的值, 这些字符串都是以定义的空白字符来进行分隔的. 小心使用!
例子 11-7. 通过文件重定向来使用read命令
1 #!/bin/bash23 read var1
管道输出到read命令中, 使用管道echo输出来设置变量将会失败.
然而, 使用管道cat输出看起来能够正常运行.
1 cat file1 file2 |2 while read line3 do4 echo $line5 done
但是, 就像Bj鰊 Eriksson所指出的:
例子 11-8. 管道输出到read中的问题
1 #!/bin/sh2 # readpipe.sh3 # 这个例子是由Bjon Eriksson所编写的.45 last="(null)"6 cat $0 |7 while read line8 do9 echo "{$line}"10 last=$line11 done12 printf "\nAll done, last:$last\n"1314 exit 0 # 代码结束.15 # 下边是脚本的(部分)输出.16 # 'echo'出了多余的大括号.1718 #############################################1920 ./readpipe.sh2122 {#!/bin/sh}23 {last="(null)"}24 {cat $0 |}25 {while read line}26 {do}27 {echo "{$line}"}28 {last=$line}29 {done}30 {printf "nAll done, last:$lastn"}313233 All done, last:(null)3435 变量(last)被设置在子shell中, 并没有被设置在外边.
在许多Linux发行版上, gendiff脚本通常都在/usr/bin下, 将find的输出通过管道传到while read结构中.
1 find $1 \( -name "*$2" -o -name ".*$2" \) -print |2 while read f; do3 . . .
shell 利用read与键盘进行交互, 来取得变量的值
Linux Shell Bash变量的间接引用 - Powered by PHPWind....
键盘可以让您更简单地与计算机交互
从学习export命令理解到的Shell环境和变量生存期(转)
Linux库文件和Shell可执行程序命令文件搜索路径变量的设置
Linux系统shell脚本判断变量文件目录:权限、是否存在、空值、相等
远程教育的教学交互与游戏交互--kaomao的博客
远程教育的教学交互与游戏交互--kaomao的博客
远程教育的教学交互与游戏交互--kaomao的博客
Struts1+jsp的jsp中通过bean定义变量来循环比较值
使用querystring,session变量以及server.Transfer方法来实现页面间的值传递
变量的声明与赋值!表达式
成员变量的定义与使用
利用键盘代替鼠标的常用操作
主力大户利用锁仓操作来进行控盘
主力大户利用锁仓操作来进行控盘
如何从SQL*PLUS向shell传递变量
Linux Shell Bash 变量替换 - Powered by PHPWind.net
软件系统的界面设计与交互设计
与用户交互的核心 - 千鳥志
为什么要进行交互设计?
利用MACD进行买卖操作的技巧
利用MACD进行买卖操作的技巧
利用磁盘的序列号进行软件加密