【shell】Here文档自动生成Makefile
2017-04-10 15:34
253 查看
在shell脚本程序中向一条命令传递输入的一种特殊方法就是使用Here文档,它允许一条命令在获得输入数据时就好像是在读取一个文件或者键盘一样,实际上是从脚本程序中得到输入数据。
here文档就是一段具有特殊目的的代码块,它使用I/O重定向的方式将一个命令序列传递到一个交互程序或者命令中。
end标识符限定了here文档的起始和结束位置。此文档实现了将语句传递cat命令。执行shell脚本的结果为:
结果生产Makefile文件:
结果:
将命令序列传递给vim编辑器:
利用vim编辑器退出保存时需要ESC键,如何输入ESC键呢?
模拟ESC键:按住ctrl+v,再按esc,就会输入一个“^[”,就是ESC键。
结果:
结果:
here文档就是一段具有特殊目的的代码块,它使用I/O重定向的方式将一个命令序列传递到一个交互程序或者命令中。
格式
[命令] << [标识符] 命令序列 ... ... [标识符]
应用
将命令序列传到另一个命令
#/bin/bash cat << END hello hello world Nice to meet you END
end标识符限定了here文档的起始和结束位置。此文档实现了将语句传递cat命令。执行shell脚本的结果为:
[lzk@localhost 33_class_3_26_shell]$ ./test.sh hello hello world Nice to meet you
将命令序列输入进一个文件(生产Makefile)
#!/bin/bash SRC=$(echo *.c) BIN=testfun CC=gcc cat << EOF > Makefile ##输出重定向到Makefile文件 ${BIN}:$SRC $CC -o \$@ \$^ .PHONY:clean clean: rm -f $BIN EOF
结果生产Makefile文件:
[lzk@localhost fun]$ cat Makefile testfun:test.c gcc -o $@ $^ .PHONY:clean clean: rm -f testfun
将命令序列传递给交互式程序
将命令序列传递给ed编辑器。[[ $# -ne 1 ]] && { printf "Please input `basename $0` [filename]" exit -1 } ed $1<< END ### 打开文件 i hello world #输入 Nice to meet you #输入 . ## 保存退出 w q END
结果:
[lzk@localhost 33_class_3_26_shell]$ ./test.sh 1.txt 0 29 [lzk@localhost 33_class_3_26_shell]$ ls 1.txt shell test.sh [lzk@localhost 33_class_3_26_shell]$ cat 1.txt hello world Nice to meet you
将命令序列传递给vim编辑器:
[[ $# -ne 1 ]] && { printf "Please input `basename $0` [filename]" exit -1 } vim $1<< END i hello world ssss Nice to meet you ^[ :wq END
利用vim编辑器退出保存时需要ESC键,如何输入ESC键呢?
模拟ESC键:按住ctrl+v,再按esc,就会输入一个“^[”,就是ESC键。
结果:
[lzk@localhost 33_class_3_26_shell]$ ./test.sh 1.txt Vim: Warning: Input is not from a terminal //vim报出警告:不是从终端输入 [lzk@localhost 33_class_3_26_shell]$ cat 1.txt hello world ssss Nice to meet you
使用here文档控制mysql
mysql<< END show databases; use mysql; select * from user END
结果:
[root@localhost 33_class_3_26_shell]# ./test.sh Database information_schema mysql test Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connectionsmax_user_connections localhost root Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y 00 0 0 localhost.localdomain root Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y0 0 0 0 127.0.0.1 root Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y 00 0 0 localhost N N N N N N NN N N N N N N N N N NN N N N N N N N N N 00 0 0 localhost.localdomain N N N N N NN N N N N N N N N N NN N N N N N N N N N N0 0 0 0
相关文章推荐
- makefile + shell脚本自动生成动态库
- 自动编译,框架警察检查,文档生成,版本标注。
- 自动生成缩略图 (文档类别:JavaScript)
- 自动生成的makefile写法
- Linux手机DIY.Shell应用扩展二.自动生成播放列表(E680系列)
- 为STARUML写的自动生成文档脚本[收藏]
- DotNet 项目开发文档的自动生成和相关工具的使用
- 自动生成xls文档系列01-HP-UNIX主机空间自动整理
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- linux下的Makefile的自动生成
- .NET2005文档自动生成
- 自动设计文档生成
- 自动生成SQL Server数据库的Word文档格式的数据字典
- 运用autoconf和automake自动生成Makefile实例
- GNU 自动工具生成Makefile流程图解
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 为STARUML写的自动生成文档脚本
- .NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)
- 使用autoconf、automake自动生成Makefile实例讲解
- 自动生成Makefile的全过程详解!