如何在 shell 脚本的配置文件中保存和更新变量

如何在 shell 脚本的配置文件中保存和更新变量

我正在做某事,并且有一个特殊的要求。

我有一个场景,我将在一个文件中定义 3 个变量。每次jenkins运行特定作业时,它都会使用这些变量创建一个容器环境。

我正在考虑最初将这 3 个变量设置为数字,它们应该每次递增,并且还应该保存在某个地方,以便在下次运行时使用更新的值。

答案1

以下假设调用包含变量的配置文件~/.myprogram.conf并调用 shell 脚本myprogram,并且变量为var1var2var3。调整此示例以满足您的实际要求:

的初始状态~/.myprogram.conf类似于:

var1=1
var2=1000
export var3=5

export var=value该配置文件是一个 shell 脚本片段,因此如果脚本调用的任何外部程序需要访问变量,则可以使用它,如上所示var3

在需要使用变量之前,您的myprogram脚本将在该配置文件中的某处添加以下内容:source

. ~/.myprogram.conf

当它需要保存变量时,即在更改变量之后,它可以使用可以将变量转储回 shell 脚本的typeset -p形式,而不会有任何奇怪的引用问题导致问题的风险。source这适用于任何类型的变量,包含任何值 - 字符串、整数、数组、关联数组。

typeset -p var1 var2 var3 > ~/.myprogram.conf

或 bash 中的等效项:

declare -p var1 var2 var3 > ~/.myprogram.conf

bash支持typesetdeclare作为同义词。其他 shell,例如ksh仅理解typeset变体)

警告:如果您的程序的另一个正在运行的实例或任何其他程序修改了~/.myprogram.conf,此时它将被覆盖,从而丢失其他程序以前所做的任何更改。仅当您同时运行程序的多个实例时,这一点才重要。

如果需要,您可以使用锁文件来防止同时访问(但请记住保持该锁的时间尽可能短,以防止任何其他程序等待太长时间)

例如,使用上面的示例conf文件,运行以下脚本:

#!/bin/bash

conf="~/.myprogram.conf"

. "$conf"

var1=$((var1 + 20))
var2=$((var2 * 2))
var3=$((var3 -5))

typeset -p var1 var2 var3 > "$conf"

将导致~/myprogram.conf包含:

declare -- var1="21"
declare -- var2="2000"
declare -x var3="0"

请注意, 的导出状态var3是通过-x而不是仅仅被记住的--

相关内容