将程序配置与代码分离非常重要。它使非程序员能够在不修改程序代码的情况下更改配置。 对于编译后的二进制可执行文件,这对于非程序员来说是不可能的,因为它不仅需要访问源文件(我们通过开源程序可以获得),还需要程序员的技能。 很少有人具备这些条件,而且大多数人不想学习。
对于像 Bash 这样的 Shell 语言,源代码访问在定义上是可用的,因为 Shell 脚本不会被编译成二进制格式。 尽管具有这种开放性,但对于非程序员来说,在 Shell 脚本中查找和更改它们并不是一个特别好的主意。 即使是知识渊博的开发人员和系统管理员也可能进行意外更改,从而导致错误或更糟的情况。
因此,将配置项放入易于维护的文本文件中可以提供分离,并允许非程序员编辑配置元素,而无需担心对代码进行意外更改。 许多开发人员对用编译语言编写的程序执行此操作,因为他们不希望用户成为开发人员。 出于许多相同的原因,对解释型 Shell 语言执行此操作也是有意义的。
通常的方式
与许多其他语言一样,您可以编写 Bash 程序的代码,该程序读取和解析 ASCII 文本配置文件,读取变量名,并在程序代码执行时设置值。 例如,配置文件可能如下所示
var1=LinuxGeek46
var2=Opensource.com
该程序将读取该文件,解析每一行,并将值设置到每个变量中。
执行 (Sourcing)
Bash 使用一种更简单的方法来解析和设置变量,称为执行。 从可执行 Shell 程序执行外部文件是一种简单的方法,可将该文件的内容完整地包含到 Shell 程序中。 从某种意义上说,这非常像编译语言的 include
语句,它在运行时包含库文件。 这样的文件可以包括任何类型的 Bash 代码,包括变量赋值。
与往常一样,演示比解释更容易。
首先,创建一个 ~/bin
目录(如果它尚不存在),并使其成为当前工作目录 (PWD)。 Linux 文件系统分层标准 将 ~/bin
定义为用户存储其可执行文件的合适位置。
在此目录中创建一个新文件。 将其命名为 main
并使其可执行
[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$
将以下内容添加到此可执行文件中
#!/bin/bash
Name="LinuxGeek"
echo $Name
并执行此 Bash 程序
[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$
创建一个新文件并将其命名为 ~/bin/data
。 此文件不需要是可执行文件。 将以下信息添加到其中
# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"
将三行添加到 main
程序,使其看起来像这样
#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
重新运行程序
[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$
关于执行,还有一件非常酷的事情要知道。 您可以使用单个点 (.
) 作为 source
命令的快捷方式。 更改 main
文件以将 .
替换为 source
#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
然后再次运行程序。 结果应与上次运行完全相同。
启动 Bash
每个使用 Bash 的 Linux 主机(实际上几乎所有发行版都使用 Bash 作为默认 Shell)都包含一些出色的内置执行示例。
每当启动 Bash Shell 时,必须对其环境进行配置才能使其可用。 有五个主要文件和一个目录用于配置 Bash 环境。 它们在此处列出及其主要功能
/etc/profile
:系统范围的环境和启动程序/etc/bashrc
:系统范围的函数和别名/etc/profile.d/
:包含用于配置各种命令行工具(例如vim
和mc
)以及系统管理员创建的任何自定义配置脚本的系统范围脚本的目录~/.bash_profile
:用户特定的环境和启动程序~/.bashrc
:用户特定的别名和函数~/.bash_logout
:用户注销时要执行的用户特定命令
尝试跟踪通过这些文件的执行序列,并确定它为非登录 Bash 初始化与登录 Bash 初始化使用哪个序列。 我在我的 Linux 培训系列的第一卷第 17 章中做了这件事,使用和管理 Linux:从零到系统管理员。
我会给你一个提示。 一切都从 ~/.bashrc
脚本开始。
结论
本文探讨了将代码和变量赋值提取到 Bash 程序中的执行。 这种从配置文件解析变量的方法快速、简单且灵活。 它提供了一种将 Bash 代码与变量赋值分离的方法,以允许非程序员设置这些变量的值。
2 条评论