Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64038
  • 博文数量: 32
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-20 16:52
文章分类

全部博文(32)

文章存档

2015年(32)

我的朋友

分类: LINUX

2015-08-25 11:18:47

参考链接:
http://blog.163.com/njut_wangjian/blog/static/1657964252013112152418345/
http://blog.csdn.net/cybermerman/article/details/8694048
在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。其使用形式如下:

点击(此处)折叠或打开

  1. 交互式程序(命令)<<EOF
  2. command1
  3. command2
  4. ...
  5. EOF
”EOF“中间的内容将以标准输入的形式输入到”交互式程序“,当shell看到”<<“知道其后面输入的分界符,当shell再次看到分界符时,两个分界符中间的部分将作为标准输入。
注意,最后的”EOF“必须单独占一行,。
举例
"EOF"一般常和cat命令连用。
一般有以下两种形式
(两种无本质区别)
1.cat<<EOF    第一种形式将内容直接输出到标准输出(屏幕)
2.cat<<EOF>filename或者cat<<EOF>>filename(cat<<EOF>filename或者cat<<EOF>>filename )
第二种形式将标准输出进行重定向,将本应输出到屏幕的内容重定向到文件而已。

例1:
#cat<<EOF      #结果直接显示到屏幕上
>12
>34D
>EOF
12          
34D
例2:
#cat>>filename<<EOF       #结果先追加到filename文件中
>DHA        
>23
>EOF    
#cat filename        #查看文件可看到追加的内容
DHA      
23
举例3.简单登录
自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向:"command << delimiter  从标准输入中读入,直至遇到分界符。
不过这种只是简单的交互,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF

重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他字符。

举例4.shell调用

点击(此处)折叠或打开

  1. #!/bin/bash
  2. printf "Do you want to see the menu?"
  3. read answer
  4. if [[ $answer == "yes" ]]
  5. then
  6.     cat <<-end
  7.     1)line1
  8.     2)line2
  9.     3)line3
  10.     end
  11. fi
执行脚本提示

点击(此处)折叠或打开

  1. eof.sh: line 13: warning: here-document at line 8 delimited by end-of-file (wanted `end')
  2. eof.sh: line 14: syntax error: unexpected end of file

分析:

1.cat命令后接<<和一个用户定义的终止符,在这里是EOF。终止符后面作为cat命令的输入,在屏幕上产生菜单选项,当达到最后的终止符后,输入结束。

2.末尾终止符恰好和的起始终止符相匹配,否则menu文档将不会结束。另外,最后的终止符周围不能有任何空格。有良好习惯的程序员往往会使用

缩进来增强脚本的可读性,但这个例子中恰巧是因为对第十行的EOF使用缩进(使用Tab缩进)导致的一个语法错误。

解决方案:

1.将用于终止的EOF移到页的最左侧确保它周围没有空格(但是这种方式看起来不美观哦~)。

2.bash/ksh/sh这3种shell允许使用另外一种方式。即在开始<<符号后面加一个长划线cat <<-EOF注意:<<后面直接跟-否则如果有空格,也会报错~。这样就可以使用tab来缩进第十行中用来结束输入的终止符。

阅读(1248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~