![如何在 shell 脚本的配置文件中保存和更新变量](https://linux22.com/image/125783/%E5%A6%82%E4%BD%95%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E4%B8%AD%E4%BF%9D%E5%AD%98%E5%92%8C%E6%9B%B4%E6%96%B0%E5%8F%98%E9%87%8F%20.png)
我正在做某事,并且有一个特殊的要求。
我有一个场景,我将在一个文件中定义 3 个变量。每次jenkins
运行特定作业时,它都会使用这些变量创建一个容器环境。
我正在考虑最初将这 3 个变量设置为数字,它们应该每次递增,并且还应该保存在某个地方,以便在下次运行时使用更新的值。
答案1
以下假设调用包含变量的配置文件~/.myprogram.conf
并调用 shell 脚本myprogram
,并且变量为var1
、var2
和var3
。调整此示例以满足您的实际要求:
的初始状态~/.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
支持typeset
和declare
作为同义词。其他 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
而不是仅仅被记住的--
。