一文掌握EOF在Shell脚本中的妙用

前言:

 EOF是End Of File的缩写,表示自定义终止符。既然自定义,那么EOF就不是固定的,可以随意设置别名,意思是把内容当作标准输入传给程序,Linux中按Ctrl-d就代表EOF。

 在Shell中我们通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。回顾一下< <的用法,当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。

用法:

<//开始
....
EOF          //结束

也可以自定义,如:

<//开始
....
FFF         //结束

注意:

 第一个EOF必须以重定向字符<<开始,第二个EOF必须顶格写,否则会报错。

EOF配合cat能够进行多行文本输出。

通过cat配合重定向能够生成文件并追加操作,在它之前先回顾几个特殊符号:

<   :输入重定向
>   :输出重定向
>>  :输出重定向,进行追加,不会覆盖之前内容
<<  :标准输入来自命令行的一对分隔号的中间内容

例:

[root@localhost ~]# cat <"
> Hello
> wolrd
> EOF
输入结束后,在终端显示以下内容:
Hello
wolrd

1.向文件file1.txt中输入内容

[root@localhost ~]# cat >file1.txt <
> aaa
> bbb
> ccc
> EOF

[root@localhost ~]# cat file1.txt 
aaa
bbb
ccc

追加内容至file1.txt中

[root@localhost ~]# cat >>file1.txt <
> 111
> 222
> 333
> EOF

[root@localhost ~]# cat file1.txt 
aaa
bbb
ccc
111
222
333

覆盖file1.txt

[root@localhost ~]# cat >file1.txt <
> Hello wolrd
> EOF

[root@localhost ~]# cat file1.txt 
Hello wolrd

2.自定义EOF

[root@localhost ~]# cat >file1.txt <
> 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 <[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 <;
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   |
+------+------+---------+

↓↓↓↓↓↓

最近刚申请了个微信公众号,上面也会分享一些运维知识,大家点点发财手关注一波,感谢大家。 【原创公众号】:非著名运维 【福利】:公众号回复 “资料” 送运维自学资料大礼包哦!
在这里插入图片描述

你可能感兴趣的:(Linux)