点击👆:Linux技术宅,关注我!!!
点号(.):在Shell脚本中,点号(.)是一个特殊的命令,用于在当前shell环境中读取并执行另一个脚本文件。也就是说,当使用点号来执行一个脚本时,该脚本中的变量、函数等定义会直接影响当前shell环境。 source命令:source命令与点号的功能完全相同。它也是用来在当前shell环境中读取并执行另一个脚本文件的。这两个命令实际上是等价的,只是source命令更明确地表达了其用途。
在当前shell环境中执行:使用点号或source命令执行脚本时,脚本会在当前shell环境中运行,而不是在一个子shell中。这意味着脚本中定义的变量、函数等会在当前shell环境中保持其值,并且可以被后续执行的命令所访问。 环境变量传递:由于点号和source命令在当前shell环境中执行脚本,因此脚本中定义的环境变量也会自动地传递到当前shell环境中。这对于需要在多个脚本之间共享环境变量的情况非常有用。
点号(.):在要执行的脚本文件名前加上点号和空格,然后跟上脚本文件的路径。
. ./script.sh
source命令:使用source命令时,需要指定要执行的脚本文件作为参数。
source ./script.sh
script1.sh:
#!/bin/bashMY_VAR="Hello from script1!"
script2.sh:
#!/bin/bash. ./script1.sh # 或者 source ./script1.shecho "The value of MY_VAR is: $MY_VAR"

确保要执行的脚本文件具有可执行权限(虽然对于点号和source命令来说不是必需的,但通常是个好习惯)。 如果脚本文件中有语法错误或运行时错误,这些错误将在当前shell环境中被捕获并显示。 使用点号或source命令时要小心,因为脚本中的任何修改(如设置环境变量或定义函数)都会影响到当前shell环境。这可能会导致意外的副作用,特别是在复杂的脚本或交互式shell会话中。
简化脚本:here documents 允许脚本在内部直接生成和传递文本,而无需创建和使用临时文件,从而简化了脚本的编写。 减少中间文件:由于 here documents 直接在脚本内部生成文本,因此减少了脚本对中间文件的需求,提高了脚本的整洁度和可读性。 标准输入替代品:here documents 可以作为标准输入的一种替代品,为交互式程序或命令提供输入。
command <<delimiterdocumentdelimiter
其中,command是接受输入的命令或程序,delimiter是一个用于标识here documents 开始和结束的标记符,可以是任意字符串,但通常选择不容易与文档内容混淆的字符串,如EOF(End Of File)。document是传递给命令或程序的多行文本。
使用cat命令显示文本:
cat <<EOFThis is a test.This is only a test.EOF
使用wc -l命令统计行数:
wc -l <<EOFline 1line 2line 3EOF
无交互地设置用户密码(注意:直接在脚本中设置密码可能存在安全风险):
echo "newpassword\nnewpassword" | passwd username# 或者使用Here Documentspasswd username <<EOFnewpasswordnewpasswordEOF
标记符的选择:确保标记符(delimiter)在文档内容中不会出现,以避免混淆。 标记符的书写:标记符必须单独成行,且开头和结尾的标记符必须完全一致(包括大小写和空格)。 扩展和转义:如果 here documents 的内容需要进行参数扩展、命令替换或表达式计算,则不要将标记符用引号括起来或用转义符 \ 转义。否则,here documents 中的文本将不会被扩展。 缩进和空格:如果使用<<-而不是<<,则 here documents 中的行首的制表符(tab)将被忽略(但空格不会被忽略)。这允许在源代码中更优雅地对齐 here documents。 安全性:在某些情况下,如设置用户密码,直接在脚本中使用 here documents 可能存在安全风险。请确保在适当的情况下使用它,并考虑其他安全措施。
推荐阅读

学习Nginx(十一):反向代理与Tomcat动静分离配置
05-21

学习Nginx(七):Location的URI解析
05-15
分享、在看与点赞
👇只要你点,我们就是胖友👇
文章转载自Linux技术宅,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




