【CentOS】EOF使用

前言

  • 本文的脚本在CentOS7中已测试

介绍

EOF是END Of File的缩写,表示自定义终止符。在linux按ctrl-d就代表EOF。
Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。

用途

编写自动执行的脚本时很有用。比如,自动执行的mysql脚本,自动执行的sftp、ftp脚本等。

注意事项

  • 格式为:
shell> shell命令 <<EOF
exit
EOF

比如这样

shell> ftp<<EOF
exit
EOF
  • 第1个EOF的后一行开始 到 第2个EOF的前一行结束,之间为EOFd内容可以自动输入。
  • 第1个EOF的同一行中,在EOF后面还可以有其它的命令,且不作为EOF内容。
  • 第2个EOF必须自己独占一行,且EOF前后不能有任何东西。
  • EOF不是关键字,可以随便改,比如可以改成HELLO!、…
  • <<是关键字,不能修改
  • EOF不是万能的。当命令不支持EOF时,那就需要换用另外的办法。比如mysql的密码输入,就不支持EOF(mysql的高版本中,已经不能把密码作为mysql命令的参数了)。

示例1

模拟输入ftp命令。人工输入时,是这样的

shell> ftp
# 这里已经切换到了ftp命令下
ftp> exit
shell>

如果需要shell脚本在ftp命令下输入exit命令,则需要搭配EOF使用。如下:

shell> ftp<<EOF
exit
EOF
shell> 

上面这段儿的执行效果与上上面的那段儿执行效果一致。但,上面这段已经省去了人工输入exit命令。

示例2

将内容Hello World写到a.txt中:

shell> cat <<EOF >a.txt
Hello World
EOF
shell> cat a.txt
Hello World

示例3

还可以使用命令替换:

shell> cat <<EOF >a.txt
today is `date`
i am in dir `pwd`
I can read numbers
`for i in $(seq 1 10)  
do   
echo $i;  
done`
EOF
shell> cat a.txt
today is Tue Mar 16 10:44:44 CST 2021
i am in dir /root
I can read numbers
1
2
3
4
5
6
7
8
9
10

参考

Linux shell 中 ( ) ‘ ‘ , () ` `, (){},$[] $(()),[ ] (( )) [[ ]]作用与区别
bash之命令替换(command substitution)
Linux中的文件分界符EOF
linux下EOF写法梳理
Shell中重定向<<EOF注意事项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值