EOF是End Of File的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,意思是把内容当作标准输入传给程序,Linux中按Ctrl-d就代表EOF。
在Shell中我们通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。回顾一下< <的用法,当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
<<EOF //开始 .... EOF //结束
也可以自定义,如:
<<FFF //开始 .... FFF //结束
第一个EOF必须以重定向字符<<开始,第二个EOF必须顶格写,否则会报错。
EOF配合cat能够进行多行文本输出。
通过cat配合重定向能够生成文件并追加操作,在它之前先回顾几个特殊符号:
< :输入重定向 > :输出重定向 >> :输出重定向,进行追加,不会覆盖之前内容 << :标准输入来自命令行的一对分隔号的中间内容
[root@localhost ~]# cat <<EOF //运行后会出现输入提示符">" > Hello > wolrd > EOF 输入结束后,在终端显示以下内容: Hello wolrd
1.向文件file1.txt中输入内容
[root@localhost ~]# cat >file1.txt <<EOF > aaa > bbb > ccc > EOF [root@localhost ~]# cat file1.txt aaa bbb ccc
追加内容至file1.txt中
[root@localhost ~]# cat >>file1.txt <<EOF > 111 > 222 > 333 > EOF [root@localhost ~]# cat file1.txt aaa bbb ccc 111 222 333
覆盖file1.txt
[root@localhost ~]# cat >file1.txt <<EOF > Hello wolrd > EOF [root@localhost ~]# cat file1.txt Hello wolrd
2.自定义EOF
[root@localhost ~]# cat >file1.txt <<FFF > test > hello > FFF [root@localhost ~]# cat file1.txt test hello
3.编写一个脚本,生成mysql配置文件
[root@localhost ~]# vim /root/test.sh #!/bin/bash cat >/root/EOF/my.cnf <<EOF [client] port=3306 socket=/usr/local/mysql/var/mysql.sock basedir=/usr/local/msyql/ datadir=/data/mysql/data pid-file=/data/mysql/data/mysql.pid user=mysql server-id=1 log_bin=mysql-bin EOF [root@localhost ~]# cat /root/EOF/my.cnf //查看生成的mysql配置文件 [client] port=3306 socket=/usr/local/mysql/var/mysql.sock basedir=/usr/local/msyql/ datadir=/data/mysql/data pid-file=/data/mysql/data/mysql.pid user=mysql server-id=1 log_bin=mysql-bin
4.编写脚本向mysql数据库建表、赋值并查询
[root@localhost ~]# vim eof.sh #!/bin/bash mysql -uroot -p123456 <<EOF use test; create table data(name varchar(15),age int,address varchar(25)); desc test.data; insert into data values("tom",23,"china"); select * from data; exit EOF
-运行脚本查看执行结果
[root@localhost ~]# bash eof.sh //运行脚本,查看数据库中信息 mysql: [Warning] Using a password on the command line interface can be insecure. Field Type Null Key Default Extra name varchar(15) YES NULL age int(11) YES NULL address varchar(25) YES NULL name age address tom 23 china
-在数据库中查看新增的数据:
[root@localhost ~]# mysql -uroot -p123456 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ mysql> use test; mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | data | +----------------+ mysql> desc test.data; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(15) | YES | | NULL | | | age | int(11) | YES | | NULL | | | address | varchar(25) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ mysql> select * from data; +------+------+---------+ | name | age | address | +------+------+---------+ | tom | 23 | china | +------+------+---------+
最近刚申请了个微信公众号,上面也会分享一些运维知识,大家点点发财手关注一波,感谢大家。 【原创公众号】:非著名运维 【福利】:公众号回复 “资料” 送运维自学资料大礼包哦!