一篇博客掌握EOF在shell中的妙用——超容易理解!!!

前言:

在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 写的大家应该都可以看得懂,如果不懂请在底下评论,我会及时回复的!
大家可以多敲一敲,会有利于学习的!

猜你喜欢

转载自blog.csdn.net/m0_46563938/article/details/108206052