免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 135370 | 回复: 63
打印 上一主题 下一主题

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)  关闭 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-11-13 12:47 |只看该作者 |倒序浏览
在看这个之前,像俺这样没有基础的,得先看完网中人的《shell十三问》的前三章,在置顶处,所以前面echo的含义,参数,及基础用法等就不说了。
我下面的所有环境都在在REDHAT LINUX9下试验的
在LINUX中,要使转义符生效,需加参数-e


从echo的变量开始说起
如:e c h o命令输出转义符以及变量。

  1. # echo -e "\007your home is $HOME , you are connected on `tty`"
  2. your home is /root , you are connected on /dev/pts/1
  3. # echo -e "\ayour home is $HOME , you are connected on `tty`"
  4. your home is /root , you are connected on /dev/pts/1
  5. #
复制代码
本例中
\007或\a你可以让终端铃响一声
显示出$ H O M E目录,
并且可以让系统执行t t y命令(注意,该命令用键盘左上角的符号,法语中的抑音符引起来,不是单引号 )。


在e c h o命令输出之后附加换行,可以使用\ n选项:

  1. $ cat echod
  2. #!/bin/sh
  3. echo -e "this echo's 3 new lines\n\n\n"
  4. echo "OK"
复制代码

编辑一个新echod,如上内容,然后运行输出如下:
  1. $ ./echod
  2. this echo's 3 new lines



  3. OK
  4. $
复制代码


在e c h o语句中使用跳格符,记住别忘了加反斜杠\:

  1. $ echo -e "here is a tab\there are two tabs\t\tok"
  2. here is a tab   here are two tabs               ok
  3. $
复制代码


把一个字符串输出到文件中,使用重定向符号>。
在下面的例子中一个字符串被重定向到一个名为m y f i l e的文件中:


  1. $ echo "The log files have all been done"> myfile
复制代码


或者可以追加到一个文件的末尾,这意味着不覆盖原有的内容:
  1. $ echo "$LOGNAME carried them out at `date`">>myfile
复制代码


现在让我们看一下m y f i l e文件中的内容:
The log files have all been done
sam 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”,那么我们只要在引号前面加上反斜杠\即可:
  1. $ echo "\"/dev/rmt0"\"
  2. "/dev/rmt0"
  3. $
复制代码


其它用法:

--〉'echo'用法收集
http://bbs.chinaunix.net/forum/viewtopic.php?t=424904

ANSI控制码
http://bbs.chinaunix.net/forum/viewtopic.php?t=207837&highlight=%B7%C9%BB%D2%B3%C8

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-11-13 15:12 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

支持!!!
P.S:read的用法,r2007班主的精华贴里有

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-11-13 15:46 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "寂寞烈火" 发表:
支持!!!
P.S:read的用法,r2007班主的精华贴里有

我本来想不再继续了,发贴子满累的,嘿嘿
r2007的贴子在这里:

http://bbs.chinaunix.net/forum/viewtopic.php?t=237464

其它:可以自己练习
  1. [sam@chenwy sam]$ read name
  2. sam
  3. [sam@chenwy sam]$ echo $name
  4. sam
  5. [sam@chenwy sam]$ read name surname
  6. sam ch
  7. [sam@chenwy sam]$ echo $name surname
  8. sam surname
  9. [sam@chenwy sam]$ read name surname
  10. sam ch yiir
  11. [sam@chenwy sam]$ echo $name
  12. sam
  13. [sam@chenwy sam]$ echo $surname
  14. ch yiir
复制代码


  1. [sam@chenwy sam]$ cat var_test
  2. #!/bin/sh
  3. #var_test
  4. echo -e "First Name :\c"
  5. read name
  6. echo -e "Middle Name :\c"
  7. read middle
  8. echo -e "Last name :\c"
  9. read surname
复制代码

var_test文件内容如上


  1. [sam@chenwy sam]$ ./var_test
  2. First Name :wing
  3. Middle Name :er
  4. Last Name:chenwy
复制代码


运行var_test文件

请问上面是不是把三个值赋给name,middle,surname三个变量了???


用read可以倒着读一个文件?
http://www.chinaunix.net/forum/viewtopic.php?t=939

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-11-13 15:49 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "wingger" 发表:

我本来想不再继续了,发贴子满累的,嘿嘿
r2007的贴子在这里:

http://bbs.chinaunix.net/forum/viewtopic.php?t=237464

其它:

班主,您辛苦了,我代表广大猜猜们向您致意      

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-11-13 15:54 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "寂寞烈火" 发表:

班主,您辛苦了,我代表广大猜猜们向您致意      

呵呵,这些对你来说应该是小菜一碟

[sam@chenwy sam]$ ./var_test
First Name :wing
Middle Name :er
Last Name:chenwy


运行var_test文件

请问上面是不是把三个值赋给name,middle,surname三个变量了???

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2004-11-13 16:00 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

1,
请问上面是不是把三个值赋给name,middle,surname三个变量了???

test:
/home/lee#read a b c d
1 2 3 4
/home/lee#echo $a
1
/home/lee#echo $b
2
/home/lee#echo $c
3
/home/lee#echo $d
4
/home/lee#

2,
用read可以倒着读一个文件?

用现成的rev和tac就可以
P.S:
呵呵,这些对你来说应该是小菜一碟

哪里哪里,我只不过是一个fans而已,我的job跟IT一点关西都没有 很多知识还得向你请教呢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-11-13 16:03 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

/home/lee#read a b c d
1 2 3 4
/home/lee#echo $a
1
/home/lee#echo $b
2
/home/lee#echo $c
3
/home/lee#echo $d
4
/home/lee#


这个俺知道

我是说在脚本里,像我上面那个

  1. [sam@chenwy sam]$ cat var_test
  2. #!/bin/sh
  3. #var_test
  4. echo -e "First Name :\c"
  5. read name
  6. echo -e "Middle Name :\c"
  7. read middle
  8. echo -e "Last name :\c"
  9. read surname
复制代码


执行这个脚本里,是不是分别赋值了,俺怎么看还是空的呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-11-13 16:15 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

echo -e "First Name :\c"
read name #var1
echo -e "Middle Name :\c"
read middle #var2
echo -e "Last name :\c"
read surname #var3

这个脚本里,你用read分别给3个变量赋了值

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2004-11-13 16:28 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "寂寞烈火" 发表:

这个脚本里,你用read分别给3个变量赋了值


按理是这样的,可是,echo $name $middle $surname是空的

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-11-13 16:34 |只看该作者

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)

原帖由 "wingger" 发表:


按理是这样的,可是,echo $name $middle $surname是空的

不会吧
/home/lee#cat f

  1. echo -e "First Name :\c"
  2. read name #var1
  3. echo -e "Middle Name :\c"
  4. read middle #var2
  5. echo -e "Last name :\c"
  6. read surname #var3
  7. echo $name $middle $surname
复制代码

/home/lee#sh f
First Name :j
Middle Name :m
Last name :l
j m l
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP