在 Linux 中,EOF
(End of File)并不是一个真正的命令,而是表示文件或数据流的结束标记。通常,在脚本中使用 EOF
作为**输入重定向(Heredoc)**的结束符号,主要用于将多行文本传递给命令或写入文件。
EOF
的典型用法是通过 Heredoc(Here Document),用来将一段多行文本作为输入传递给某个命令。
Heredoc 语法:
command <<EOF
内容
EOF
command
:接收文本输入的命令。<<EOF
:表示开始一个 Here Document,EOF
可以是任意标识符,常见的是EOF
、END
,但需保持前后标识符一致。EOF
:表示 Here Document 的结束标记,且必须独占一行,不允许前后有其他字符。
使用场景与实例
1. 将多行文本传递给 cat
命令
EOF
常用于将多行文本输入给 cat
以显示或重定向输出到文件:
#!/bin/bash
cat <<EOF
这是第一行
这是第二行
EOF
输出结果:
这是第一行
这是第二行
cat <<EOF
命令表示开始从标准输入读取,直到遇到 EOF
为止。期间的所有内容都会被 cat
处理并输出。
2. 将多行文本写入文件
可以将 Here Document 的内容写入文件:
#!/bin/bash
cat <<EOF > myfile.txt
第一行内容
第二行内容
EOF
这里使用了输出重定向 >
,将 cat
命令的输出写入 myfile.txt
文件中。
3. 用于传递多行输入给 mail
命令
Here Document 可以将多行内容作为邮件正文发送:
#!/bin/bash
mail -s "测试邮件" example@example.com <<EOF
你好,
这是一封测试邮件。
EOF
mail -s "测试邮件"
发送邮件,<<EOF
将以下的内容作为邮件正文直到遇到 EOF
结束。
4. 将多行 SQL 语句传递给 mysql
可以使用 EOF
将多行 SQL 语句传递给 mysql
命令:
#!/bin/bash
mysql -u 用户名 -p密码 <<EOF
USE mydatabase;
SELECT * FROM mytable;
EOF
通过 Heredoc,多个 SQL 语句被传递给 mysql
命令一起执行。
5. 结合变量使用
Heredoc 中也可以使用 shell 变量:
#!/bin/bash
name="小明"
cat <<EOF
你好,$name!
欢迎使用 Linux。
EOF
输出结果:
你好,小明!
欢迎使用 Linux。
在 Here Document 中,shell 会解析变量 $name
,替换为其值 “小明”。
6. 禁止变量解析(使用引号)
如果不希望 Here Document 中的变量被解析,可以在 EOF
前加上引号:
#!/bin/bash
name="小明"
cat <<'EOF'
你好,$name!
欢迎使用 Linux。
EOF
输出结果:
你好,$name!
欢迎使用 Linux。
此时 $name
不会被解析,而是按原样输出。
7. 应用在 ssh
远程命令执行
可以使用 Here Document 将多行命令传递给远程服务器执行:
#!/bin/bash
ssh user@remote_host <<EOF
cd /path/to/directory
ls -l
EOF
在远程服务器上执行多个命令,将 cd
和 ls -l
命令传递给远程主机 remote_host
。
EOF 应用场景总结:
- 多行文本处理:用于将一大段文本传递给命令处理,比如
cat
、mail
等。 - 自动化脚本:批量执行 SQL 查询,自动化任务管理等。
- 远程操作:结合
ssh
批量执行远程命令。 - 避免多次重定向:通过 Here Document 可以避免在脚本中多次使用
echo
重定向。
总结:
EOF
在 Linux 中通过 Here Document 提供了便捷的方式将多行文本传递给命令处理。结合输出重定向、变量解析等功能,能够简化复杂脚本的编写,同时增强脚本的可读性。