【shell】Here文档自动生成Makefile

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LLZK_/article/details/69949721

在shell脚本程序中向一条命令传递输入的一种特殊方法就是使用Here文档,它允许一条命令在获得输入数据时就好像是在读取一个文件或者键盘一样,实际上是从脚本程序中得到输入数据。
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

猜你喜欢

转载自blog.csdn.net/LLZK_/article/details/69949721