a person is playing a dj's turntable in a recording studio

如何使用 Bash 解析配置文件

了解如何在 Bash 中解析配置文件的变量。 这种方法将代码与设置分离,...
首页 » 博客 » 如何使用 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/:包含系统范围脚本的目录,用于配置各种命令行工具,例如 vimmc 以及系统管理员创建的任何自定义配置脚本
  • ~/.bash_profile:用户特定的环境和启动程序
  • ~/.bashrc:用户特定的别名和函数
  • ~/.bash_logout:用户注销时要执行的用户特定命令

尝试追踪执行序列通过这些文件,并确定非登录 Bash 初始化与登录 Bash 初始化使用的序列。 我在我的 Linux 培训系列使用和管理 Linux:从零到系统管理员的第 17 章中做了这件事。

我给你一个提示。 一切都从 ~/.bashrc 脚本开始。

结论

本教程探讨了一种看似简单的技术 – 从配置文件中解析变量。 不要被它的简单性所迷惑:这种方法提供了一种强大的方法来将代码与设置分离,使程序更用户友好和更具适应性。 这对开发人员和用户来说都是双赢的。

作者

如果您喜欢这篇文章,您可能也会喜欢这些