玩转 EOF
前言:
在Shell中我们通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。回顾一下< <的用法,当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。
一、EOF用法
基本用法:
<<EOF //开始
....
EOF //结束
也可以自定义,如:
<<FFF //开始
....
FFF //结束
EOF配合cat能够进行多行文本输出。
通过cat配合重定向能够生成文件并追加操作,在它之前先回顾几个特殊符号:
< :输入重定向
> :输出重定向
>> :输出重定向,进行追加,不会覆盖之前内容
<< :标准输入来自命令行的一对分隔号的中间内容
二、 EOF注意事项
注意:
第一个EOF必须以重定向字符<<开始,第二个EOF必须顶格写,否则会报错。(在下面的内容我会详细说明)
三、EOF 使用实例
3.1、实例1
[root@localhost ~]# cat <<EOF //运行后会出现输入提示符">"
> Hello
> wolrd
> EOF
输入结束后,在终端显示以下内容:
Hello
wolrd
3.2、实例2
- 第一个EOF必须以重定向字符<<开始,第二个EOF必须顶格写,否则会报错
[root@localhost d]# cat > a.txt << EOF
> asd
> asd
> EOF
> EOF
[root@localhost d]# cat b.txt
asd
asd
EOF
3.3、实例3
- 向文件a.txt中输入内容
[root@localhost d]# cat > a.txt <<EOF
> 111
> 222
> 333
> EOF
[root@localhost d]# cat a.txt
111
222
333
3.4、实例4
- 覆盖文件a.txt的内容
[root@localhost d]# cat > a.txt <<EOF
> aaa
> bbb
> ccc
> EOF
[root@localhost d]# cat a.txt
aaa
bbb
ccc
3.5、实例5
- 向文件a.txt追加内容
[root@localhost d]# cat >> a.txt <<EOF
> 123
> 456
> EOF
[root@localhost d]# cat a.txt
aaa
bbb
ccc
ddd
123
456
3.6、 实例6
- 自定义EOF名
[root@localhost d]# cat > a.txt <<AAA
> 123
> 456
> 789
> AAA
[root@localhost d]# cat a.txt
123
456
789
3.7、实例7
- 通过 read 命令接收输入并打印,输入的值是两个 EOF 标记
之间的部分,i作为变量值
[root@localhost d]# read i << EOF
> hello
> world
> EOF
[root@localhost d]# echo "$i"
hello
world
四、综合案例
自动安装环境shell脚本
#!/bin/bash
#This is my first Shell-Script ##这是我的第一个Shell脚本
systemctl stop firewalld ##关闭防火墙
systemctl disable firewalld ##开机自动关闭防火墙
echo "防火墙关闭和防火墙开机关闭"
mount /dev/cdrom /mnt ##对光盘进行临时挂在一下
echo "临时挂载完成"
echo /dev/cdrom /mnt iso9660 defaults 0 0 >> /etc/fstab ##临时挂在看一下 iso9660类型
echo "永久挂载完成"
sed -i "s/enforcing/disabled/g" /etc/selinux/config ##关闭核心防护
echo "关闭核心防护"
###这边下面就是搭建YUM本地源
rm -rf /etc/yum.repos.d/*.repo
cat >> /etc/yum.repos.d/local.repo <<EOF ##这边我们就用到了上面 EOF 的方法
[centos]
name=CentOS
baseurl=file:///mnt
enabled=0
gpgcheck=1
EOF
if [ $? = 0 ]
then
echo "本地yum仓库安装成功"
else
echo "本地yum仓库安装失败"
fi
echo "现在开始进行编译安装httpd"
yum -y install httpd
systemctl start httpd
echo "httpd安装成功并开启"
init 6
##打完收工,重启虚拟机
到现在我们的 EOF 就学的差不多了,这篇 EOF 写的大家应该都可以看得懂,如果不懂请在底下评论,我会及时回复的!
大家可以多敲一敲,会有利于学习的!