繁体   English   中英

重复调用bash脚本时如何使用一个环境变量

[英]How to use one environment variable when calling a bash script repeatedly

我有一项任务是使用配额监控系统,如果监控结果超过配额,则发送警告电子邮件。 但是,在发出一封警告电子邮件后,应该在半小时内调用此监控程序,下次如果监控状态仍与上次相同,则无需再次发送相同的警告电子邮件。

为了做到这一点,我想利用环境变量来存储上次监视结果的状态,以便下次可以检查并且不会发送重复的电子邮件。 我的解决方案之一是在.bashrc添加或更新export语法,但为了激活更新的export语法,我必须运行bash ,这可能是不必要的。

所以我想问有没有办法更新环境变量,这样每次调用监控程序Bash脚本时,它都会获得新的更新值?

将环境变量存储在不同的.file中,然后将源<.file>

这是一个使用heredoc的自包含解决方案。 乍一看它似乎是一个精心设计和不完美的解决方案,它确实有其用途,因为它具有弹性,并且在跨多台机器部署时效果很好,不需要对外部文件进行特殊监控或权限,最重要的是,没有不受欢迎的环境惊喜。

此示例使用bash ,但如果手动设置$thisfile变量或其他方式,它将与sh一起使用。

此示例假定20已作为mymonitorvalue于脚本文件中,并使用参数$ 1作为概念证明。 您显然newval="$1"更改为计算配额的任何内容:


用法示例:

#bash $>./script 10
Value from previous run was 20
Value from this test was 10
Updating value ...

#bash $>./script 10
not doing anything ... result is the same as last time

#bash $>

脚本:

#!/bin/bash

thisfile="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ; thisfile="${DIR}${0}"

read -d '' currentvalue <<'EOF'
mymonitorval=20
EOF

eval "$currentvalue"

function changeval () { 
sed -E -i "s/(^mymonitorval\=)(.*)/mymonitorval\="$1"/g" "$thisfile"
}

newvalue="$1"

if [[ "$newvalue" != "$mymonitorval" ]]; then 
    echo "Value from previous run was $mymonitorval"
    echo "Value from this test was "$1""
    echo "Updating value ..."
    changeval "$newvalue"
else
    echo "not doing anything ... result is the same as last time" 
fi

说明:

thisfile=可以手动设置脚本位置。 此示例使用此处的自动解决方案: https//stackoverflow.com/a/246128

read -d ... EOF是保存在变量$currentvalue的heredoc

在这种情况下, eval "$currentvalue"相当于在终端中键入mymonitorval=10

function changeval...}更新定界符到位的内容(它改变了物理.SH脚本文件)

newvalue="$1"用于测试目的。 $newvalue将由您计算配额的脚本决定

if.... block是要执行两组备用操作,具体取决于$newvalue是否与上次相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM