http://www.cnblogs.com/xiangzi888/archive/2012/03/24/2415077.html
在shell脚本程序中,向一条命令传递输入的一种特殊方法是使用here文档。一个here document就是一段带有特殊目的的代码段。它使用I/O重定向的形式将一个命令序列传递到一个交互程序或者命令中。它允许一条命令在获得输入数据时就好像是在读取一个文件或键盘一样,而实际是从脚本程序中得到输入数据。格式:
COMMAND <<SpecialString
...
SpecialString
SpecialString用来界定命令序列的范围,是一个特殊的字符序列,用来界定命令序列的范围,可自定义,但不能出现在传递命令的文档内容中。
使用举例:
1.使用cat打印多行消息,也可重定向哦(echo 有点麻烦了),同样支持参数替换哦
cat <<EOF > /tmp/test
this is here doc!
date
$HOME
EOF

this is here doc!
date
/home/xiangzi888
2.设置变量
var=$(cat <<EOF
content
EOF
)
3. 广播: 将消息发送给每个登陆的用户
wall <<HALT
E-mail your noontime orders for pizza to the system administrator.
# more messages
# 注意: 'wall'命令会把注释行也打印出来.
HALT
4.带有抑制tab功能的多行消息(去掉每行前面的TAB字符)
cat <<-EOF
this is here doc!
date doesn't work
EOF
5.关闭变量替换的功能  
cat <<'EOF'
$HOME
doesn't work here!
EOF
6.生成另外一个脚本(比较诡异!)
(cat <<'EOF'
#!/bin/bash
#  Note that since we are inside a subshell,
#+ we can't access variables in the "outside" script.
echo "Generated file will be named:  /tmp/script.sh"
#  Instead, the result is literal output.
a=7
b=3
c=$(($a * $b))
echo "c = $c"
exit 0
EOF
) > /tmp/script.sh
7.here doc与函数
#!/bin/bash
#这个函数看起来就是一个交互函数, 但是...
GetPersonalData ()
{
    read firstname
    read lastname
    read address
}

# 给上边的函数提供输入.
GetPersonalData <<DATA
Robert
Bozeman
Hust
DATA
8.‘匿名’here文档,不显示!(利用 : 可以注释掉一段代码块,或者写一个自文档化(self-documenting)的脚本,详见:http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/here-docs.html)
#!/bin/bash
# 如果其中某个变量没被设置, 那么就打印错误信息.  
: <<TESTVARIABLES
${HOSTNAME?}${USER?}${MAIL?}
TESTVARIABLES
exit 0
9.一些注意事项
a.某些工具是不能放入here document中运行的。
b.结尾的limit string, 就是here document最后一行的limit string, 必须从第一个字符开始. 它的前面不能够有任何前置的空白. 而在这个limit string后边的空白也会引起异常. 空白将会阻止limit string的识别.
c.对于那些使用"here document", 并且非常复杂的任务, 最好考虑使用expect脚本语言, 这种语言就是为了达到向交互程序添加输入的目的而量身定做的.
Stay hungry Stay foolish

expect

yum install expect   依赖于tcl包

shell之here文档的更多相关文章

  1. SharePoint中用Power shell命令设置文档库列表的权限

    首先停止继承权限 $web = Get-PnPweb $spoList= Get-PnPList "Testlist" -Web $web (注释:获取对象)$spoList.Br ...

  2. SharePoint中用Power shell命令修改文档的创建时间

    第一步:pnp组件连接到SharePointConnect-PnpOnline -url 网站地址 第二步:查出文档库及文档库下所有的文件 Get-PnPListItem -List 文档库名称 第三 ...

  3. MongoDB文档的增删改操作

    上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对 ...

  4. mongodb文档的CRUD

    本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo  如果存在foo 就use   ...

  5. Linux 命令 - man 查看命令的文档

    man 命令是 Linux 中最常用的命令,碰到任何让你疑惑的命令,都可以 man 一下来查看详情.不只是 shell 命令,C 语言库函数和系统调用等内容也可以通过 man 命令查看. man 命令 ...

  6. Linux--2 Linux之文档与目录结构、shell基本命令

    一.Linux之文档与目录结构 1.Linux之文档与目录结构 Linux目录结构的组织形式和Windows有很大的不同.Linux没有“盘(如C盘.D盘.E盘)”的概念,而是建立一个根"/ ...

  7. 使用shell脚本生成数据库markdown文档

    学习shell脚本编程的一次实践,通过shell脚本生成数据库的markdown文档,代码如下: HOST=xxxxxx PORT=xxxx USER="xxxxx" PASSWO ...

  8. Shell中的here文档

    1.名词解释: 以下是维基百科解释: here文档[1],又称作heredoc.hereis.here-字串或here-脚本,是一种在命令行shell(如sh.csh.ksh.bash.PowerSh ...

  9. MongoDB学习笔记:文档Crud Shell

    MongoDB学习笔记:文档Crud Shell   文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...

随机推荐

  1. phpstom 实用laravel 需要附加的 命令

    首先利用composer 下载相关的插件 在根目录执行此代码 composer require barryvdh/laravel-ide-helper 再者在config/app.php 添加一条命令 ...

  2. HDU1272-小希的迷宫(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 #include<cstdio> #include<cstring> u ...

  3. HDU 1044

    http://acm.hdu.edu.cn/showproblem.php?pid=1044 代码题,没什么好说的,先预处理出两点间距离,然后dfs搜一下找最大值 #include <iostr ...

  4. 【题解】【BT】【Leetcode】Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  5. DISCOVAR de novo

    海宝建议用这个拼接软件 http://www.broadinstitute.org/software/discovar/blog/?page_id=98 DISCOVAR – variant call ...

  6. keynotes egestas,PPT 渐变背景下载-imsoft.cnblogs

  7. 阿里云2003服务器VPN搭建[转自阿里云官方论坛]

    VPN可以应用在很多方面,很多公司只是拿它接入公司内部网络,但我们做安全的需要的是利用它做跳板上网(还有提高网速).这篇文章主要是针对这种应用来说的,包括公网VPN的配置. 服务器配置 前奏:关闭防火 ...

  8. 用java将excel表格中的内容修改后写入到另一个excel中

    package nn; import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl. ...

  9. ZOJ 1042 W’s Cipher

    原题链接 题目大意:按照规则解码.26个字母分成三组,每一组按照顺时针移位编码.现在已知移动的位数,要求解码. 解法:以前看过一本古典密码学的书,百度贴吧密码吧也有很多经典的加密方法,想什么凯撒移位. ...

  10. ES6 — 数组Array

    ES6对数组引入了几个新函数: (1) Array.of() 作用是将一组数值,转换为数组. Array.of(1,2,3,4); //[1,2,3,4] (2) Array.from() 作用是把类 ...