
如何使用 Bash 解析配置文件
将设置存储在单独的文件中(而非代码)可以让任何人轻松更改它们,即使没有编码技能。这就像为你的程序配备了独立的旋钮和开关,而无需使用螺丝刀来调整所有内容。
这是关于 shell 脚本的教程系列的第七部分。 前一篇教程教你如何尽早并经常测试。
简介
将程序配置与代码分离非常重要。 这使非程序员无需修改程序代码即可更改配置。 即使是开源软件,对于非程序员来说,更改编译后的程序也很困难。 这需要原始代码(可用的)和专业的编程技能,而大多数人缺乏这些技能,也不想学习。
虽然 Bash 脚本因为没有编译而易于阅读,但仍然不建议非程序员直接编辑它们。 即使你可以看到代码,但理解它可能很棘手,修改它可能会导致意想不到的问题。 即使是知识渊博的开发人员和系统管理员也可能进行意外更改,从而导致错误或更糟糕的情况。
配置文件允许将设置与代码分离,使任何人都可以轻松进行调整,并保持程序的安全性。 请记住将配置文件视为旋钮,而不是深层机械结构。 许多开发人员为用编译语言编写的程序这样做,因为他们不希望用户是开发人员。 出于许多相同的原因,对解释型 shell 语言也这样做也是有意义的。
通常的方式
与其他许多语言一样,你可以为 Bash 程序编写代码,该代码读取和解析 ASCII 文本配置文件,读取变量名,并在程序代码执行时设置值。 例如,配置文件可能如下所示
var1=LinuxGeek46
var2=Opensource.com
程序将读取该文件,解析每一行,并将值设置到每个变量中。
Source 命令
Bash 使用一种更简单的方法来解析和设置变量,称为 source 命令。 从可执行 shell 程序中 source 外部文件是一种简单的方法,可以将该文件的内容完整地包含到 shell 程序中。 在某种意义上,这非常类似于编译语言的 include
语句,这些语句在运行时包含库文件。 这样的文件可以包含任何类型的 Bash 代码,包括变量赋值。
像往常一样,演示比解释更容易。
首先,创建 ~/bin
目录(如果它尚不存在),并使其成为当前工作目录 (PWD)。 Linux 文件系统层次结构标准 将 ~/bin
定义为用户存储其可执行文件的适当位置。
在此目录中创建一个新文件。 将其命名为 main
并使其可执行
$ touch main
$ chmod +x main
将以下内容添加到此可执行文件中
#!/bin/bash
Name="LinuxGeek"
echo $Name
并执行此 Bash 程序
$ ./main
LinuxGeek
创建一个新文件并将其命名为 ~/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"
重新运行程序
$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
关于 source 命令,还有一件很酷的事情要知道。 你可以使用单个点 (.
) 作为 source
命令的快捷方式。 更改 main
文件以将 .
替换为 source
#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
再次运行程序。 结果应与上次运行完全相同。
启动 Bash
每个使用 Bash 的 Linux 主机(几乎所有 Linux 发行版都将 Bash 作为默认 shell)都包含一些出色的内置 source 命令示例。
每当 Bash shell 启动时,都必须配置其环境以使其可用。 有五个主要文件和一个目录用于配置 Bash 环境。 它们在此处列出,并附带其主要功能
/etc/profile
:系统范围的环境和启动程序/etc/bashrc
:系统范围的函数和别名/etc/profile.d/
:包含系统范围脚本的目录,用于配置各种命令行工具,例如vim
和mc
以及系统管理员创建的任何自定义配置脚本~/.bash_profile
:用户特定的环境和启动程序~/.bashrc
:用户特定的别名和函数~/.bash_logout
:用户注销时要执行的用户特定命令
尝试追踪执行序列通过这些文件,并确定非登录 Bash 初始化与登录 Bash 初始化使用的序列。 我在我的 Linux 培训系列使用和管理 Linux:从零到系统管理员的第 17 章中做了这件事。
我给你一个提示。 一切都从 ~/.bashrc
脚本开始。
结论
本教程探讨了一种看似简单的技术 – 从配置文件中解析变量。 不要被它的简单性所迷惑:这种方法提供了一种强大的方法来将代码与设置分离,使程序更用户友好和更具适应性。 这对开发人员和用户来说都是双赢的。