shell之here文档
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文档的更多相关文章
- SharePoint中用Power shell命令设置文档库列表的权限
首先停止继承权限 $web = Get-PnPweb $spoList= Get-PnPList "Testlist" -Web $web (注释:获取对象)$spoList.Br ...
- SharePoint中用Power shell命令修改文档的创建时间
第一步:pnp组件连接到SharePointConnect-PnpOnline -url 网站地址 第二步:查出文档库及文档库下所有的文件 Get-PnPListItem -List 文档库名称 第三 ...
- MongoDB文档的增删改操作
上一篇文章中介绍了MongoDB的一些基本知识,同时看到了怎么启动一个MongoDB服务,并且通过MongoDB自带的shell工具连接到了服务器. 这一次,就通过MongoDB shell介绍一下对 ...
- mongodb文档的CRUD
本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo 如果存在foo 就use ...
- Linux 命令 - man 查看命令的文档
man 命令是 Linux 中最常用的命令,碰到任何让你疑惑的命令,都可以 man 一下来查看详情.不只是 shell 命令,C 语言库函数和系统调用等内容也可以通过 man 命令查看. man 命令 ...
- Linux--2 Linux之文档与目录结构、shell基本命令
一.Linux之文档与目录结构 1.Linux之文档与目录结构 Linux目录结构的组织形式和Windows有很大的不同.Linux没有“盘(如C盘.D盘.E盘)”的概念,而是建立一个根"/ ...
- 使用shell脚本生成数据库markdown文档
学习shell脚本编程的一次实践,通过shell脚本生成数据库的markdown文档,代码如下: HOST=xxxxxx PORT=xxxx USER="xxxxx" PASSWO ...
- Shell中的here文档
1.名词解释: 以下是维基百科解释: here文档[1],又称作heredoc.hereis.here-字串或here-脚本,是一种在命令行shell(如sh.csh.ksh.bash.PowerSh ...
- MongoDB学习笔记:文档Crud Shell
MongoDB学习笔记:文档Crud Shell 文档插入 一.插入语法 db.collection.insertOne() 将单个文档插入到集合中.db.collection.insertMan ...
随机推荐
- Koch曲线
Koch曲线是一种分形,完整的Koch曲线像雪花,维基百科上记录Koch曲线最早出现在海里格·冯·科赫的论文<关于一条连续而无切线,可由初等几何构作的曲线>中,它的定义如下,给定线段AB, ...
- Python 的property的实现 .
描述符.就是 将某种特殊类型①的类的实例指派给另一个类的属性 ①只要实现一下三种方法的其中一个就是特殊类型. __get__(self,instance,owner) -用于访问属性,他返回属性的值. ...
- NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者 作者: raindy 来源:http://bbs.hanzify.org/index.php?showtopic=30029 时间: ...
- Magento怎么设置和使用Cookie和Session?
Magento中cookie和session是已经封装了的 Magento的核心对象-Mage_Core_Model_Cookie & Mage_Core_Model_Session Mage ...
- 数据库基本----SQL语句大全
学会数据库是很实用D~~记录一些常用的sql语句...有入门有提高有见都没见过的...好全...收藏下...其实一般用的就是查询,插入,删除等语句而已....但学学存储过程是好事...以后数据方面的东 ...
- magento关于站点搬家,换空间
1,先把原来空间的文件全部压缩后(有些不要的就不要压缩)下载下来,然后传到新空间去,注意下载下来后核对一下是否大小一样,建议使用ftp工具下载, 2,同样把原来空间的数据库打包下来,再在新空间创建一个 ...
- Java学习第五天
一.内存分析 内存分析:指数据的存储,理解程序执行过程,运行期的行为,不是编译期. 分类 栈: 方法栈存储方法的局部变量|形参后进先出 堆: 对象堆存储new的对象散列存储 方法区: 特殊的堆,类方法 ...
- Dynamic Animator 、 CollectionViewLayout
1 给视图添加重力效果 1.1 问题 当给某个视图加上UIGravityBehavior重力行为之后,这个视图就具有重力,会如同掉入了无底洞,不断地下坠,不断的加速,本案例使用UIGravityBeh ...
- MINIX3 进程调度分析
MINIX3 进程调度分析 5.1MINIX3 进程调度概要 MINIX3 的进程调度还是非常简单的,调度算法是非常短小的,其目的就是体现 了一个简单和高效的设计原则,当然简单和高效其实很难并存, ...
- 文件夹差异文件对比工具 meld
/***************************************************************************************** * 文件夹差异文件 ...