[转帖]Bash EOF 技巧

bash,eof,技巧 · 浏览次数 : 0

小编点评

**Bash EOF 技巧** **1. 命令行输出** ```bash $ cat << EOF> Hello> EOFHello1234 ``` **2. 写入文本** ```bash cat << EOF >1.txt111222333EOF12345 ``` **3. 追加文本** ```bash cat >> 1.txt <<EOFabcdefghiEOF12345 ``` **4. 覆盖文本** ```bash cat << EOF >1.txtaaabbbcccEOF12345 ``` **5. 自定义 EOF** ```bash cat << a > 1.txt111222333a12345 输出: $ cat 1.txt1112223331234 ``` **6. 另一种格式** ```bash cat > filename <<EOFcat > 1.txt <<EOF123456789EOF12345 ``` **7. 示例** **7.1 配置文件** ``` clientport = 3306socket = /usr/local/mysql/var/mysql.sock[mysqld]port = 3306socket = /usr/local/mysql/var/mysql.sockbasedir = /usr/local/mysql/datadir = /data/mysql/datapid-file = /data/mysql/data/mysql.piduser = mysqlbind-address = 0.0.0.0server-id = 1sync_binlog=1log_bin = mysql-bin[myisamchk]key_buffer_size = 8Msort_buffer_size = 8Mread_buffer = 4Mwrite_buffer = 4Msql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESport = 3306EOF123456789101112131415161718192021222324252627 ``` **7.2 新建分区并挂载** ```bash cat auto_add_disk.sh #!/bin/bashfdisk /dev/sdb <<EOFnp1wqEOF/sbin/mkfs .ext4 /dev/sdb1 &> ``` **7.3 匹配输出** ```bash cat <<EOF | grep 'b' | tee b.txt> foo> bar> baz> EOFbarbaz$ cat b.txtbarbaz1234567891011 ```

正文

Bash EOF 技巧

EOF适用场景:

  • 命令行多行输出
  • 脚本包装
  • 类型配置文件

1. 命令行输出

$ cat << EOF
> Hello
> EOF
Hello
  • 1
  • 2
  • 3
  • 4

2. 写入文本

cat << EOF >1.txt
111
222
333
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

复制终端是这样的。

cat << EOF >1.txt
> 111
> 222
> 333
> EOF
  • 1
  • 2
  • 3
  • 4
  • 5

回车后

$ cat 1.txt
111
222
333
  • 1
  • 2
  • 3
  • 4

3. 追加文本

cat << EOF >> 1.txt
444
555
666
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

查看1.txt内容

$ cat 1.txt
111
222
333
444
555
666
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. 覆盖文本

cat << EOF >1.txt
aaa
bbb
ccc
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

查看

$ cat 1.txt
aaa
bbb
ccc
  • 1
  • 2
  • 3
  • 4

5. 自定义 EOF

cat << a > 1.txt
111
222
333
a
  • 1
  • 2
  • 3
  • 4
  • 5

输出:

$ cat 1.txt
111
222
333
  • 1
  • 2
  • 3
  • 4

6. 另一种格式

  • cat > filename <<EOF
  • cat << EOF > filename
cat > 1.txt <<EOF
123
456
789
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

查看

$ cat 1.txt
123
456
789
  • 1
  • 2
  • 3
  • 4

追加内容

cat >> 1.txt <<EOF
abc
def
ghi
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

查看内容

$ cat 1.txt
123
456
789
abc
def
ghi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7. 示例

7.1 配置文件

或者cat << EOF > /usr/local/mysql/my.cnf

cat > /usr/local/mysql/my.cnf << EOF         
[client]
port = 3306
socket = /usr/local/mysql/var/mysql.sock

[mysqld]
port = 3306
socket = /usr/local/mysql/var/mysql.sock

basedir = /usr/local/mysql/
datadir = /data/mysql/data
pid-file = /data/mysql/data/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1
sync_binlog=1
log_bin = mysql-bin

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
port = 3306
EOF

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

7.2 新建分区并挂载

$ cat auto_add_disk.sh         
#!/bin/bash
fdisk  /dev/sdb  <<EOF
n
p
1

wq
EOF

/sbin/mkfs .ext4 /dev/sdb1 && /bin/mkdir -p /data && /bin/mount /dev/sdb1 /data
echo 'LABEL=data_disk /data ext4 defaults 0 2' >> /etc/fstab

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

7.3 设置变量

$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)

$ echo -e "$sql"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

7.4 输出脚本

cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF
  • 1
  • 2
  • 3
  • 4
  • 5

查看内容

$ cat print.sh
#!/bin/bash
echo $PWD
echo /home/user
  • 1
  • 2
  • 3
  • 4

7.5 匹配输出

$ cat <<EOF | grep 'b' | tee b.txt
> foo
> bar
> baz
> EOF
bar
baz

$ cat b.txt
bar
baz

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7.6 json 文本

cat >> /etc/docker/daemon.json < EOF
{
   "exec-opts": ["native.cgroupdriver=systemd"],
   "log-driver": "json-file",
   "log-opts": {
   "max-size":  "100m"
    },
   "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
 }
 EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

查看

$ cat /etc/docker/daemon.json
{
   "exec-opts": ["native.cgroupdriver=systemd"],
   "log-driver": "json-file",
   "log-opts": {
   "max-size":  "100m"
    },
   "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参考:

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux25108 人正在系统学习中
爱死亡机器人
微信公众号
爱技术、爱搬砖、爱斜杠.....

与[转帖]Bash EOF 技巧相似的内容:

[转帖]Bash EOF 技巧

Bash EOF 技巧 文章目录 Bash EOF 技巧1. 命令行输出2. 写入文本3. 追加文本4. 覆盖文本5. 自定义 EOF6. 另一种格式7. 示例7.1 配置文件7.2 新建分区并挂载7.3 设置变量7.4 输出脚本7.5 匹配输出7.6 json 文本 EOF适用场景: 命令行多行输

[转帖]Bash 取字符串的最后 N 个字符 - ${str:0-N:LENGTH}

2021-10-11 10:49 jetwill 阅读(39) 评论(0) 编辑 收藏 举报 Bash 取字符串的最后 N 个字符: ${str:0-N:LENGTH} or ${str:0-N} https://tldp.org/LDP/abs/html/string-manipulation.h

[转帖]Bash脚本编程学习笔记02:脚本基础和bash配置文件

脚本基础 参考资料:Shell Scripts (Bash Reference Manual) 不严谨地说,编程语言根据代码运行的方式,可以分为两种方式: 编译运行:需要先将人类可识别的代码文件编译成机器可运行的二进制程序文件后,方可运行。例如C语言和Java语言。 解释运行:需要一个编程语言的解释

[转帖]Bash脚本编程学习笔记03:算术运算

https://www.cnblogs.com/alongdidi/p/bash_arithmetic_expression.html 简介 Bash所支持的算术运算和C语言是一样的,这里指的是操作符(operator)以及它们的优先级(precedence)、结合性(associativity)和

[转帖]Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量

Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量 我自己接触Linux主要是大学学习的Turbolinux --> 根据《鸟哥的Linux私房菜:基础篇》(第三版) --> 马哥的就业班课程。给我的感觉是这些课程对于bash的讲解,理论上是不够的,但是限于时间、篇幅和精

[转帖]Bash脚本编程学习笔记04:测试命令test、状态返回值、位置参数和特殊变量

https://www.cnblogs.com/alongdidi/p/test_exitStatus_positionalAndSpecialParameter.html 我自己接触Linux主要是大学学习的Turbolinux --> 根据《鸟哥的Linux私房菜:基础篇》(第三版) --> 马

[转帖]Bash脚本编程学习笔记03:算术运算

https://www.cnblogs.com/alongdidi/p/bash_arithmetic_expression.html 简介 Bash所支持的算术运算和C语言是一样的,这里指的是操作符(operator)以及它们的优先级(precedence)、结合性(associativity)和

[转帖]Bash脚本编程学习笔记05:用户交互与脚本调试

https://www.cnblogs.com/alongdidi/p/read_and_bash_debug.html 用户交互 在《学习笔记04》中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式。还有一种方式,是read命令。 [root@c7-server ~]# read nam

[转帖]Bash脚本编程学习笔记06:条件结构体

简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式。 if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现,返回值为0的话则执行CMD,否则就离开该条件结构体,脚本继续往下执行。 [root@c7-serve

[转帖]Bash脚本编程学习笔记07:循环结构体

https://www.cnblogs.com/alongdidi/p/bash_loop_construct.html 本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文《Bash脚本编程学习笔记03:算术运算》中我有说明不要使用,不过自己忘记了。大家还