Linux Shell中EOF的妙用
笔者最近遇到几起在Shell中使用EOF来定义一块执行脚本,终于可以大大减少代码量和增强逻辑性,现在将其总结分享出来。Shell中通常将EOF与 << 结合使用,表示后续输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。
EOF可以替换为你想要任何符号。
为了方便,笔者在docker容器内完成测试。
其用法如下:
<<EOF
....
EOF
1、执行mysql数据库的多指令
#!/bin/bash
mysql -hlocalhost -uroot -p123456 <<EOF
show master status\G;
#show slave hosts;
use docker_test;
select * from cards;
#exit
EOF
测试效果如下:
2、expect自动交互执行
详情参考Linux中expect工具完成远程交互通信(1),里面有详细的代码的解释。
3、cat和eof追加文件
#!/bin/bash
cat >> /test.log <<EOF
abcdef
hello word !
12345678
EOF
4、追加配置到文件。这是笔者在添加阿里docker加速时发现的。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
这里存在 <<和<<-的区别问题,有-的话,EOF作为结束符时,前面可以有制表符和空格。同时加了引号,里面内容的表达式不会被解析。
5、与:结合来注释代码段,:是shell中的空语句
#!/bin/bash
echo "hello world!"
:<<COMMENTBLOCK
echo "starting"
echo "this is a pro"
echo "comment"
COMMENTBLOCK
echo "hello world!"