多文件 BASH 脚本的最佳实践?

多文件 BASH 脚本的最佳实践?

我正在做的事情是这样的:

我想将脚本分成多个块。在一个地方定义所有变量的最佳做法是什么?我应该在 init 脚本中定义它们并导出吗?或者有没有更好的方法让脚本的每个部分都查看一个静态变量文件?也许是 JSON 之类的?这是一个例子

项目/main.sh

#!/bin/bash

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

menu () {
    read # blah blah whatcha wanna run?
    # other bits
}   
opts () {
    case ... # a bunch of options
    1) ./src/another_script.sh # one of a bunch of scripts in a separate folder
}
while true
do
   menu
   opts
done

现在在 ./src/another_script.sh 脚本中,为了方便和跳转能力,处理变量的最佳方法是什么?(这是一个技术术语)

答案1

创建一个仅包含变量声明的独立文件:

new_user="poopmacscoop"
a_list_of_packages="pyhon3 nmap apache2.... others"
some_other_info_for_another_script="important info"

然后在所有脚本文件的开头包含此文件source /my/variables

答案2

我必须对原始答案进行一些可能有用的改进。一些信息取决于脚本的目标用户,一些是关于 bash 变量的一般知识,一些来自我自己的经验。

通过对 PATH 环境变量进行一些修改,可以快速引用存储脚本的目录(~/bin)和/或保存变量声明的目录(~/lib)。

变量特定于调用它们的环境。也就是说,如果您导出它们,它们将全局可用,供您使用,但在此上下文中,仅供您的登录环境使用。如果您在脚本内部更改它们,它们只会在脚本运行时保留该值。

在我的 .bashrc 中,我定义并导出 VAR="login variable"。每次我登录到 solaris 主机时都会获取此信息。

现在,在这个我称为 proof.bash 的示例脚本中,我将在脚本的全局上下文中修改 VAR,然后在脚本内的函数中再次修改。这不会在脚本执行后改变变量的值。

#!/bin/bash
# VAR is usable because it was declared/exported outside this script.
echo $VAR
#Define bash global variable
#This variable is global and can be used anywhere in this bash script
VAR="global variable"
function see_it_to_believe {
#Define bash local variable
#This variable is local to bash function only
local VAR="local variable"
echo $VAR
}
echo $VAR
see_it_to_believe
# Note the bash global variable did not change
# "local" is bash reserved word
echo $VAR

脚本运行后,我就可以echo $VAR获取“登录变量”。

相关内容