8月新片,终于等来最想看的那部
目录:
编写Shell脚本时,您可能需要将多行文本或代码传递给交互式命令(例如
tee
,
cat
或
sftp
。
在Bash和Zsh等其他shell中,“这里”文档(Heredoc)是一种重定向类型,允许您将多行输入传递给命令。
编写HereDoc的语法采用以下形式:
<< 'DELIMITER' HERE-DOCUMENT DELIMITER
- 第一行以可选命令开头,后跟特殊重定向操作符
<<和定界标识符。- 您可以使用任何字符串作为定界标识符,最常用的是EOF或END。如果未使用定界标识符,则在将此处文档行传递给命令之前,shell会替换所有变量,命令和特殊字符。重定向运算符
<<-减号将导致所有前导制表符被忽略。 这使您可以在外壳程序脚本中编写此处文档时使用缩进。 不允许使用前导空格字符,只能使用制表符。
此处文档块可以包含字符串,变量,命令和任何其他类型的输入。最后一行以定界标识符结尾。 分隔符前面不允许有空格。 - 您可以使用任何字符串作为定界标识符,最常用的是EOF或END。如果未使用定界标识符,则在将此处文档行传递给命令之前,shell会替换所有变量,命令和特殊字符。重定向运算符
基本的Heredoc示例
在本节中,我们将介绍一些如何使用heredoc的基本示例。
Heredoc最常与cat命令结合使用。
在下面的示例中,我们传递了两行文本,其中包含一个环境变量和一个使用here文档进行分类的命令。
cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF
从下面的输出中可以看到,变量和命令输出都被替换了:
The current working directory is: /home/linuxize You are logged in as: linuxize
让我们看看如果将定界符括在单引号或双引号中会发生什么。
cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF
您会注意到,当用引号引起来时,shell不会进行任何参数扩展和命令替换。
The current working directory is: $PWD You are logged in as: $(whoami)
if true; then cat <<- EOF Line with a leading tab. EOF fi
Line with a leading tab.
除了在屏幕上显示输出之外,您还可以使用
>
,
>>
运算符将其重定向到文件。
cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF
如果file.txt不存在,将创建它。 使用
>
,文件将被覆盖,而
>>
则将输出附加到文件。
Heredoc输入也可以通过管道传递。 在以下示例中,
sed
命令将用
e
替换
l
字符的所有实例:
cat <<'EOF' | sed 's/l/e/g' Hello World EOF
Heeeo Wored
要将管道数据写入文件:
cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF
通过SSH使用heredoc
使用Heredoc是通过SSH在远程系统上执行多个命令的最便捷的方法。
使用不带引号的定界符时,请确保转义所有变量,命令和特殊字符,否则它们将在本地插值:
ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF
The current local working directory is: /home/linuxize The current remote working directory is: /home/user
您可能还需要设置基于SSH密钥的身份验证并连接到Linux服务器,而无需输入密码。
结论
在本指南中,您了解了什么是
heredoc
以及如何在shell脚本中使用它。
Bash if..else语句
决策是计算机编程的最基本概念之一。 像在任何其他编程语言中一样,Bash中的if,if..else,if..elif..else和嵌套的if语句可用于根据特定条件执行代码。







