adb shell logcat使用cat打印菜单和read怎么连接在一起

&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!博客访问: 337589
博文数量: 90
博客积分: 4010
博客等级: 上校
技术积分: 830
注册时间:
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
我下面的所有环境都在在REDHAT LINUX9下试验的在LINUX中,要使转义符生效,需加参数-e从echo的变量开始说起如:e c h o命令输出转义符以及变量。
# echo -e "\007your home is $HOME , you are connected on `tty`"your home is /root , you are connected on /dev/pts/1# echo -e "\ayour home is $HOME , you are connected on `tty`"your home is /root , you are connected on /dev/pts/1#
本例中\007或\a你可以让终端铃响一声显示出$ H O M E目录,并且可以让系统执行t t y命令(注意,该命令用键盘左上角的符号,法语中的抑音符引起来,不是单引号 )。在e c h o命令输出之后附加换行,可以使用\ n选项:
$ cat echod#!/bin/shecho -e "this echo's 3 new lines\n\n\n"echo "OK"编辑一个新echod,如上内容,然后运行输出如下:
$ ./echodthis echo's 3 new linesOK$在e c h o语句中使用跳格符,记住别忘了加反斜杠\:
$ echo -e "here is a tab\there are two tabs\t\tok"here is a tab& &here are two tabs& && && && && &ok$把一个字符串输出到文件中,使用重定向符号>。在下面的例子中一个字符串被重定向到一个名为m y f i l e的文件中:
$ echo "The log files have all been done"> myfile或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:
$ echo "$LOGNAME carried them out at `date`">>myfile现在让我们看一下m y f i l e文件中的内容:
The log files have all been donesam carried them out at 六 11月 13 12:54:32 CST 2004引号是一个特殊字符,所以必须要使用反斜杠\来使s h e l l忽略它的特殊含义。假设你希望使用e c h o命令输出这样的字符串:“/ d e v / r m t 0”,那么我们只要在引号前面加上反斜杠\即可:
$ echo "\"/dev/rmt0"\""/dev/rmt0"$其它用法:--〉'echo'用法收集:) http://bbs.chinaunix.net/forum/viewtopic.php?t=424904ANSI控制码 http://bbs.chinaunix.net/forum/viewtopic.php?t=207837&highlight=%B7%C9%BB%D2%B3%C8 r2007的贴子在这里:http://bbs.chinaunix.net/forum/viewtopic.php?t=237464其它:可以自己练习
[sam@chenwy sam]$ read namesam[sam@chenwy sam]$ echo $namesam[sam@chenwy sam]$ read name surnamesam ch[sam@chenwy sam]$ echo $name surnamesam surname[sam@chenwy sam]$ read name surnamesam ch yiir[sam@chenwy sam]$ echo $namesam[sam@chenwy sam]$ echo $surnamech yiir
[sam@chenwy sam]$ cat var_test#!/bin/sh#var_testecho -e "First Name :\c"read nameecho -e "Middle Name :\c"read middleecho -e "Last name :\c"read surnamevar_test文件内容如上
[sam@chenwy sam]$ ./var_testFirst Name :wingMiddle Name :erLast Name:chenwy运行var_test文件请问上面是不是把三个值赋给name,middle,surname三个变量了???用read可以倒着读一个文件? http://www.chinaunix.net/forum/viewtopic.php?t=939 home/lee#cat f
echo -e "First Name :\c"read name #var1echo -e "Middle Name :\c"read middle #var2echo -e "Last name :\c"read surname #var3echo $name $middle $surname/home/lee#sh fFirst Name :jMiddle Name :mLast name :lj m l cat:显示文件内容,创建文件,还可以用它来显示控制字符。注意:在文件分页符处不会停下来;会一下显示完整个文件。因此,可以使用m o r e命令或把c a t命令的输出通过管道传递到另外一个具有分页功能的命令中,使用命令less file可实现相同的功能。如下形式
$ cat myfile | more或$ cat myfile | pgc a t命令的一般形式为:
cat [options] filename1 ... filename2 ...1、显示名为m y f i l e的文件:
$ cat myfile2、显示m y f i l e 1、m y f i l e 2、m y f i l e 3这三个文件,可以用:
$ cat myfile1 myfile2 myfile33、创建一个包含上述三个文件的内容,名为b i g f i l e的文件,可以用输出重定向到新文件中:
$ cat myfile1 myfile2 myfile3 > bigfile4、如果cat的命令行中没有参数,输入的每一行都立刻被cat命令输出到屏幕上,输入完毕后按结束
$ catHello world Hello world&&$5、新建文件
$cat >myfileThis is great$cat myfileThis is greatcat:参数选项使用方式:
cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数:
-n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 -v 或 --show-nonprinting 显示非打印字符例:显示时加上行号
$cp /etc/httpd/conf/httpd /usr/sam $ cat -n httpd.conf 把 httpd.conf 的内容加上行号后输入 httpd1.conf 这个文件里
$cat -n httpd.conf > httpd1.conf 对文件httpd.conf加上行号(空白不加)后显示
$ cat -b httpd.conf 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。
$ cat -b textfile1 textfile2 >> textfile3清空/etc/test.txt档案内容
$cat /dev/null > /etc/test.txt 使用 sed 与 cat 除去空白行
$ cat -s /etc/X11/XF86Config | sed '/^[[:space:]]*$/d' -s项我试了一下,不成功,不知是不是用错了其它参数来自:(这个我没试)http://bbs.chinaunix.net/forum/viewtopic.php?t=438463&highlight=catcat 还可以在您查看包含如制表符这样的非打印字符的文件时起帮助作用。您可以用以下选项来显示制表符:
* -T 将制表符显示为 ^I * -v 显示非打印字符,除了换行符和制表符,它们使用各自效果相当的“控制序列”。例如,当您处理一个在 Windows 系统中生成的文件时,这个文件将使用 Control-M(^M)来标记行的结束。对于代码大于 127 的字符,它们的前面将会被加上 M-(表示“meta”),这与其它系统中在字符前面加上 Alt- 相当。 * -E 在每一行的结束处添加美元符($)。 显示非打印字符
$ cat -t /etc/X11/XF86Config ... # Multiple FontPath entries are allowed (they are concatenated together) # By default, Red Hat 6.0 and later now use a font server independent of # the X server to render fonts. ^IFontPath^I"/usr/X11R6/lib/X11/fonts/TrueType" ^IFontPath^I"unix/:7100" EndSection ...
$ cat -E /etc/X11/XF86Config ... # Multiple FontPath entries are allowed (they are concatenated together)$ # By default, Red Hat 6.0 and later now use a font server independent of$ # the X server to render fonts.$ $ FontPath "/usr/X11R6/lib/X11/fonts/TrueType"$ FontPath "unix/:7100"$ $ EndSection$ ...
$ cat -v /etc/X11/XF86Config ... ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@M-|M-8^X^@^@^@ P^@^O"M-X^O M-@^M^@^@^@M-^@^O"M-@M-k^@M-8*^@ @M-^H$M-@M-9|A(M-@)M-yM-|M-sM-*M-hW^A^@^@j^@ M-|M-sM-%1M-@M-9^@^B^@^@M-sM-+fM-^A= ^@ ^@ F^@^@ ^@M-9^@^H^@^@M-sM-$M-G^E(l!M-@M-^? ^IM-A5^@^@^D^@PM-^]M-^\X1M-H%^@^@^D^@tyM-G ...tee:读取标准输入的数据,并将其内容输出成文件。   语   法:tee [-ai][--help][--version][文件…]   补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。我们可利用tee把管道导入的数据存成文件,甚至一次保存数份文件。   参   数:-a 附加到既有文件的面,而非覆盖它。如果给予tee指令的文件名称已经存在,预设会覆盖该文件的内容。加上此参数,数据会新增在该文件内容的最面,而不会删除原先之内容。        -i 忽略中断信号        --help 在线帮助        --version 显示版本信息   例一:   列出文本文件slayers.story的内容,同时复制3份副本,文件名称分别为ss-copy1、ss-copy2、ss-copy3:   
$ cat slayers.story |tee ss-copy1 ss-copy2 ss-copy3  例一: 把列出当前目录,并把结果结到myfile里  
$ls -l |tee myfile管道:可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为:
命令1 |命令2其中|是管道符号。上例就是 标准输入、输出和错误当我们在s h e l l中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆, s h e l l同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:
文件文件描述符输入文件—标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。输出文件—标准输出1:它是命令的输出,缺省是屏幕,也可以是文件。错误输出文件—标准错误2:这是命令错误的输出,缺省是屏幕,同样也可以是文件。如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)。系统中实际上有1 2个文件描述符,但是正如我们在上表中所看到的, 0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。表5 - 1列出了最常用的重定向组合,并给出了相应的文件描述符。在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。
常用文件重定向命令command > filename 把把标准输出重定向到一个新文件中command >> filename 把把标准输出重定向到一个文件中(追加)command 1 > fielname 把把标准输出重定向到一个文件中command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中command 2 > filename 把把标准错误重定向到一个文件中command 2 >> filename 把把标准输出重定向到一个文件中(追加)command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)command filename2 把c o m m a n d命令以f i l e n a m e文件作为标准输入,以f i l e n a m e 2文件作为标准输出command < filename 把c o m m a n d命令以f i l e n a m e文件作为标准输入command << delimiter 把从标准输入中读入,直至遇到d e l i m i t e r分界符command <&m 把把文件描述符m作为标准输入command >&m 把把标准输出重定向到文件描述符m中command <&- 把关闭标准输入例子[转载]常用文件重定向命令 (这篇网中人的回复好精彩啊^-^)http://bbs.chinaunix.net/forum/viewtopic.php?t=191375关于>&2、2>&1等重定向的详细解释! http://bbs.chinaunix.net/forum/viewtopic.php?t=16361转贴:UNIX管道和重定向功能在系统备份中的妙用 http://www.chinaunix.net/forum/viewtopic.php?t=17925 exec:e x e c命令可以用来替代当前s h e l l;换句话说,并没有启动子s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:exec command其中的c o m m a n d通常是一个s h e l l脚本。我所能够想像得出的描述e x e c命令最贴切的说法就是:当这个脚本结束时,相应的会话可能就结束了。e x e c命令的一个常见用法就是在用户的. p r o f i l e最后执行时,用它来执行一些用于增强安全性的脚本。如果用户的输入无效,该s h e l l将被关闭,然后重新回到登录提示符。e x e c还常常被用来通过文件描述符打开文件。e x e c在对文件描述符进行操作的时候(也只有在这时),它不会覆盖你当前的s h e l l。可以看网中人《shell十三问》第六节:6) exec 跟 source 差在哪? 能把十三问一次性看完最好,不过对我来说还是有些难度,今天才弄清楚第四问,看了好久才明白,目前为止,看完1,2,3,4,及11exec:e x e c命令可以用来替代当前s h e l l;换句话说,并没有启动子s h e l l。使用这一命令时任何现有环境都将会被清除,并重新启动一个s h e l l。它的一般形式为:exec command其中的c o m m a n d通常是一个s h e l l脚本。e x e c在对文件描述符进行操作的时候,它不会覆盖你当前的s h e l l。这章到此为止了 source和exec的区别1,我认为他们带的参数是不一样的source通常是shell脚本,而exec不但可以把一个脚本当成参数,而且还可以把一个系统命令当参数,例如: exec ls2,另外一个不同就是,exec任务执行完毕后,会执行类似logout的操作,而source执行完一个任务后返回当前的shell.3,还有,他们的用途也不是一样的我的理解是这样的,望指正! 1、变量一定得用""2、处理顺序要搞清楚:这两行一定要牢牢记在脑中
命令格式command-name options argument 处理过程:shell 会依据 IFS(Internal Field Seperator) 将 command line 所输入的文字给拆解为"字段"(word)。 然后再针对特殊字符(meta)先作处理,最后再重组整行 command line 。3、例子:空格的好理解,但CR字符不好理解,如'',""
& &$ A='B & &> C & &> ' & &$ echo "$A" & &B & &C & &$ echo $A & &B C echo 的$A加上soft quote后,得出的结果不同了,第一个是断行字符(new line),取消了CR和IFS的功能第二个应该是一个空格了,仅取消CR功能,而保留IFS功能第三个是CR原因如下:然而,由于 echo $A 时的变量没至于 soft quote 中,因此当变量替换完成后并作命令行重组时, 会被解释为 IFS (空格键),而不是解释为 New Line (换行符)字符。而在escape中
& &$ A=B\ & &> C\ & &> & &$ echo $A & &BC & &$ echo "$A "& &BC 得出的结果是BC,原因: 键本身在 shell meta 中的特殊性,在 \ 跳脱后面,仅仅取消其 CR 功能,而不会保留其 IFS 功能(空格)。 因此就是(NULL)因此在上面两个例子中
键所产生的字符有四种:
CR (结束命令)IFS (空格)NL(New Line) (断行)NULL (空)不知我的理解是否正确,还望各位指点,呵呵,我感觉这样说好像更容易理解 :oops:上面理解了,下面就不难了,找个地方放一下,俺怕自己给忘了而接下来的例子中,则要理解shell meta 与 command meta 有些meta ,都是有特殊用途的,比如 { } ,但在awk中 却要用 { } 来区分出 awk 的命令区段(BEGIN, MAIN, END),也就是双方都用到了{}如果输入下例命令就会出错:
$ awk {print $0} 1.txt 这是因为 { } 在 shell 中并没关闭,那 shell 就将 {print $0} 视为command block , 而不是awk的参数,但同时又没有" ; "符号作命令区隔,因此就出现 awk 的语法错误结果。 要解决之,可用 hard quote :
$ awk '{print $0}' 1.txt 将原本的 {、、$(注三)、} 这几个 shell meta 关闭, 避免掉在 shell 中遭到处理,而完整的成为 awk 参数中的 command meta 。 ( 注三:而其中的 $0 是 awk 内建的 field number ,而非 awk 的变量,awk 自身的变量无需使用 $ 。) 要是理解了 hard quote 的功能,再来理解 soft quote 与 escape 就不难:
awk "{print \$0}" 1.txt awk \{print\ \$0\} 1.txt 第一行:由于soft quote中没法关闭$,因此用\来关闭$meta第二行:\{关闭{,\ (\空格,关闭空格键),\$,\}就不用说了如果awk 的 $0 的 0 值是从另一个 shell 变量读进比方说:已有变量 $A 的值是 0 ,那如何在 command line 中解决 awk 的 $$A 呢? 那么 hard quoe 就不可行了: 代码:
$ awk '{print $$A}' 1.txt 因为 $A 的 $ 在 hard quote 中是不能替换变量的。 可以使用如下几种方案:
A=0 awk "{print \$$A}" 1.txt awk \{print\ \$$A\} 1.txt awk '{print $'$A'}' 1.txt awk '{print $'"$A"'}' 1.txt& &&&# 注:"$A" 包在 soft quote 中 上面得注意$和''和""的包含位置
阅读(3351) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
2008年3月 Linux/Unix社区大版内专家分月排行榜第二
2012年9月 Linux/Unix社区大版内专家分月排行榜第三2007年6月 Linux/Unix社区大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Abstract: How to run an interactive task in background?
Details: I am trying to run this simple script under ash shell (Busybox) as a background task.
myscript.sh&
However the script stops immediately...
Stopped (tty input) myscript.sh
The myscript.sh contents... (only the relvant part, other then that I trap SIGINT, SIGHUP etc)
START_COPY()
cat /dev/charfile & /path/outfile &
catpid = $!
STOP_COPY()
kill catpid
netcat SOME_IP PORT | while read EVENT
case $EVENT in
start) START_COPY;;
stop) STOP_COPY;;
From simple command line tests I found that bot cat and netcat try to read from tty.
Note that this netcat version does not have -e to supress tty.
Now what can be done to avoid myscript becoming stopped?
Things I have tried so for without any success:
1) netcat/cat ... & /dev/tty
(or the output of tty)
2) Running the block containing cat and netcat in a subshell using (). This may work but then how to grab PID of cat?
Over to you experts...
The problem still exists.
A simple test for you all to try:
1) In one terminal run netcat -l -p 11111 (without &)
2) In another terminal run netcat localhost 11111 &
(This should stop after a while with message Stopped (TTY input) )
How to avoid this?
解决方案 you probably want netcat's "-d" option, which tells it not to read from STDIN.
本文地址: &
摘要:如何在后台运行交互式任务详细信息:我想作为后台任务运行下的灰壳(Busybox的)这个简单的脚本
&myscript.sh放大器; 不过剧本立即停止...
[1] +停止(TTY输入)myscript.sh 该myscript.sh内容...(只有relvant一部分,其他然后,我的陷阱SIGINT,SIGHUP等) #!/ bin / sh的catpid = 0START_COPY(){
猫的/ dev / charfile&GT; /路径/ OUTFILE和放大器;
catpid = $!}STOP_COPY(){
杀catpid}netcat的SOME_IP PORT |同时读取事件做
启动)START_COPY ;;
停止)STOP_COPY ;;
ESACDONE 从简单的命令行测试中,我发现,机器人猫的netcat尝试从tty的读取。请注意,这的netcat版本没有-e苏preSS终端。现在可以做些什么来避免的MyScript正在停止?事情我都试过所以没有任何成功: 1)的netcat /猫...&下;为/ dev / tty的(或输出的tty ) 2)运行包含猫的netcat使用子shell块()。这可能工作,但如何抓住猫PID?在你的专家... 问题依然存在。为大家简单的测试尝试: 1)在一个终端运行的netcat -l -p 11111(不含&安培;) 2)在另一个终端运行netcat的本地主机11111安培; (这应该停止后消息的同时,停止(TTY输入))如何避免这种情况?解决方案 它告诉它不要读你可能想的netcat的“-d”选项, STDIN 。
本文地址: &
扫一扫关注官方微信嵌入式(934)
1. Read的一些选项
 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项。
-a&:将内容读入到数&#20540;中
echo -n &Input muliple values into an array:&read -a arrayecho &get ${#array[@]} values in array&
-d&:表示delimiter,即定界符,一般情况下是以IFS为参数的间隔,但是通过-d,我们可以定义一直读到出现执行的字符位置。例如read –d madfds value,读到有m的字符的时候就不在继续向后读,例如输入为 hello m,有效&#20540;为“hello”,请注意m前面的空&#26684;等会被删除。这种方式可以输入多个字符串,例如定义“.”作为结符号等等。
-e&:只用于互相交互的脚本,它将readline用于收集输入行。读到这几句话不太明白什么意思,先跳过。
-n&:用于限定最多可以有多少字符可以作为有效读入。例如echo –n 4 value1 value2,如果我们试图输入12 34,则只有前面有效的12 3,作为输入,实际上在你输入第4个字符‘3’后,就自动结束输入。这里结果是value为12,value2为3。
-p&:用于给出提示符,在前面的例子中我们使用了echo –n “…“来给出提示符,可以使用read –p ‘… my promt?’value的方式只需一个语句来表示。
-r&:在参数输入中,我们可以使用’/’表示没有输入完,换行继续输入,如果我们需要行最后的’/’作为有效的字符,可以通过-r来进行。此外在输入字符中,我们希望/n这类特殊字符生效,也应采用-r选项。
-s&:对于一些特殊的符号,例如箭头号,不将他们在terminal上打印,例如read –s key,我们按光标,在回车之后,如果我们要求显示,即echo,光标向上,如果不使用-s,在输入的时候,输入处显示^[[A,即在terminal上 打印,之后如果要求echo,光标会上移。
-t&:用于表示等待输入的时间,单位为秒,等待时间超过,将继续执行后面的脚本,注意不作为null输入,参数将保留原有的&#20540;
2. Read的相关实例
a. 拼接文件
#将afile文件中的前三行与bfile中的前四行拼接在一起while read -u3 i && read -u4doecho $i $jdone 3&afile 4&bfile
b. 输入不在终端显示
read -p &Input passwd:& -s Passwdecho $Passwd
c. 限时输入,否则退出
#延迟五秒,没有输入将自动退出read -p &Input a number:& -t 5 Number
d. 读取限定字符
#从输入中取5个字符read -p &Input a word:& -n 5 Word
e. 等待输出q退出
#输入,直到输入q,将自动退出read -dp -p &Input some words end with q:& word
#####################################
.cn/s/blog_0r7ct.html
&read命令 -n(不换行) -p(提示语句) -n(字符个数) -t(等待时间) -s(不回显)
1、基本读取
read命令接收标准输入(键盘)的输入,或其他文件描述符的输入(后面在说)。得到输入后,read命令将数据放入一个标准变量中。下面是read命令
的最简单形式::
#!/bin/bash
echo -n &Enter your name:&&&&//参数-n的作用是不换行,echo默认是换行
read&&name&&&&&&&&&&&&&&&&&&&//从键盘输入
echo &hello $name,welcome to my program&&&&&&//显示信息
exit 0&&&&&&&&&&&&&&&&&&&&&&&//退出shell程序。
//********************************
由于read命令提供了-p参数,允许在read命令行中直接指定一个提示。
所以上面的脚本可以简写成下面的脚本::
#!/bin/bash
read -p &Enter your name:& name
echo &hello $name, welcome to my program&
在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,则第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的&#20540;都给第一个变量。如果太少输入不会结束。
//*****************************************
在read命令行中也可以不指定变量.如果不指定变量,那么read命令会将接收到的数据放置在环境变量REPLY中。
read -p &Enter a number&
环境变量REPLY中包含输入的所有数据,可以像使用其他变量一样在shell脚本中使用环境变量REPLY.
2、计时输入.
使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。
-t选项指定read命令等待输入的秒数。当计时满时,read命令返回一个非零退出状态;
#!/bin/bash
if read -t 5 -p &please enter your name:& name
&&&&echo &hello $name ,welcome to my script&
&&&&echo &sorry,too slow&
除了输入时间计时,还可以设置read命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋&#20540;给变量。
#!/bin/bash
read -n1 -p &Do you want to continue [Y/N]?& answer
case $answer in
&&&&&&echo &fine ,continue&;;
&&&&&&echo &ok,good bye&;;
&&&&&echo &error choice&;;
该例子使用了-n选项,后接数&#20540;1,指示read命令只要接受到一个字符就退出。只要按下一个字符进行回答,read命令立即
接受输入并将其传给变量。无需按回车键。
3、默读(输入不显示在监视器上)
有时会需要脚本用户输入,但不希望输入的数据显示在监视器上。典型的例子就是输入密码,当然还有很多其他需要隐藏的数据。
-s选项能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)。
#!/bin/bash
read&&-s&&-p &Enter your password:& pass
echo &your password is $pass&
最后,还可以使用read命令读取Linux系统上的文件。
每次调用read命令都会读取文件中的&一行&文本。当文件没有可读的行时,read命令将以非零状态退出。
读取文件的关键是如何将文本中的数据传送给read命令。
最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令
#!/bin/bash
count=1&&&&//赋&#20540;语句,不加空&#26684;
cat test | while read line&&&&&&&&//cat 命令的输出作为read命令的输入,read读到的&#20540;放在line中
&&&echo &Line $count:$line&
&&&count=$[&$count &#43; 1&]&&&&&&&&&&//注意中括号中的空&#26684;。
echo &finish&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:619057次
积分:14031
积分:14031
排名:第634名
原创:742篇
转载:520篇
评论:100条
(2)(5)(1)(2)(4)(5)(5)(2)(2)(2)(2)(3)(1)(7)(8)(7)(11)(37)(14)(25)(35)(32)(79)(52)(74)(91)(39)(9)(26)(19)(35)(22)(15)(14)(574)

我要回帖

更多关于 shell脚本 cat 的文章

 

随机推荐