shell here documents用法.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
shell here documents用法

Unix/Linux Shell编程实战:使用嵌入文档Here Documents一、Here Documents(嵌入文档)Here Documents作为重定向的一种方式,指示shell从源文件的当前位置开始读取输出,直到遇到只包含一个单词的文本行时结束。在该过程中读到的所有文本行都将作为某一个命令的标准输入而使用。 here-documents的使用形式:command [-] limit_stringmsg_bodylimit_string如果用双引号或单引号将”limit_string”引用起来或用转义符\将其转义,则here-document中的文本将不被扩展,即参数替换被禁用。否则,here-document中的所有文本都将进行常规的参数扩展、命令替换、表达式计算。在后一种情况下,字符序列\newline将被忽略, 并且必须对元字符\, $, 和`使用\进行转义。如果用而不是-,则后面的limit_string必须位于行首,否则,若here_document用在函数内部,则会报语法错误;用在函数外面,其后面的所有内容均会被当做here_document的内容。如果重定向操作符是-, 则msg_body和limit_string行中的所有前缀TAB字符都将被忽略(但空格不会被忽略)。这样源代码中的here-documents就可以按照优雅的嵌入方式进行对齐。二、技术的应用 下面我们考察一下在Shell脚本中使用Here Documents的必要性所在。Shell脚本对于文本文件的处理是非常方便的,因此实现本文所要完成的工作还是比较简单的,只需对所有文件进行一次循环过程。但是问题在于,从①-②,②-③的每一部,实际上都是使用cut、echo、cat等进行流处理,每个处理过程的输出作为下一步骤的输出。这里面自然的要使用重定向的方法。在以前对BASH用的不熟的时候,往往笨拙的使用临时文件存储这些中间结果。比如:REG -cut -line - all.txt。这样处理的过程中,代码显的非常杂乱,而且有时候不得不写出多个脚本来处理重定向,这种情况使得问题更为加重。 因此,这次下决心要将代码写的精简一些。在BASH内部可以使用Here Documents进行重定向,使流的输入输出都是在同一脚本内进行的,不用拆开成多个脚本,也省略了大量的中间文件,使代码非常清晰、紧凑。Here Documents的一般形式如下:0001 commands ID 0002???? here documents .......???? ...... 000n ID\n 在上面这个语法描述中,0001行的commands是任何SHELL命令。ID是一个字符串标识,标志着嵌入文档的开始(习惯上,常用的标识是EOF,等等)。从0002行可以写任何文本,这里写入的内容都将作为标准输入传送给commands。在最后一行写标识符ID,代码嵌入文本结束。在使用Here Documents编写脚本的时候注意以下两点: 在000n行上,必须只有一个ID,也就是说,ID前面不能有空格,ID后面必须是回车符。否则SHELL处理时会出错。这一点在实际时要尤为注意。当使用 - 时, 输入行和000n行上的ID前的任何TAB字符将会被忽略;嵌入文档内可以写普通文本(比如说,写程序的使用Usage),也可以是标准的SHELL语句。如果是SHELL语句,要使用反引号(`)括起来,这时候语句的标准输出也将作为嵌入文档送给commands。这个特性非常有用。cat用法[exam@Exam-Server user]$ cat aa.sh 1 #!/bin/bash 2 3 cat EOF # cat file EOF,则输出到新文件中,而不是stdout 4??? Now: 5??? `date` 6 EOF[exam@Exam-Server user]$ sh aa.shNow:可以将here_document的输出保存到文件或变量中variable=$(cat EOFThis varibale runs over multiple lines.EOF)echo $variableThis varible runs over mutiple lines. 可以用匿名的命令来接收here_document的输出,该技术可以用来注释掉代码块。: EOF${HOSTNAME?}${USER?}${MAIL?} # 如果其中一个变量没被设置, 那么就打印错误信息.EOF三 7月 26 19:23:24 CST 2006 上面是一个最简单的例子,但是已经基本概括了Here Documents的使用方法。在aa.sh中,E

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档