在Bash中获取配置文件的最佳实践

时间:2018-07-30 18:37:57

标签: bash shell scripting

在bash中x <- x[rowSums(is.na(x[,5:9]))!=5,] 的配置文件并将其变量/内容导入脚本中的最佳方法是什么? 假设我有一个名为source的配置文件,就像:

/path/index.conf

我正在编写将执行以下操作的shell脚本:

1)如果配置文件不存在,则脚本将使用默认值创建配置文件。

2)如果缺少任何变量的值,则脚本将用默认值替换那些特定的变量。例如,缺少VAR1= VAR2 = 1 VAR3=A&C #comment PASSWORD=xxxx EMAIL=abc@abc.com 值,应将其替换为VAR1=

3)脚本应跳过注释和空格(例如VAR1=0某些空格),并抱怨是否任何行包含$,%和&字符

这是我到目前为止所做的:

VAR2 = 1

我正在学习bash脚本,并且我了解我的方法不完整,可能不是最佳实践。谁能帮我?

1 个答案:

答案 0 :(得分:2)

您在这里不能使用source,因为您的示例配置无效 bash代码。采购文件意味着按原样包含它-就像 #include在C世界中。而是使用适当的 INI解析器,例如 https://github.com/rudimeier/bash_ini_parser。您的脚本可能看起来 像这样:

#!/usr/bin/env sh

config=config

var1_default=0
var2_default=0
var3_default=0
password_default="default_password"
email_default="default@email.com"

source_variables () {
    if [ ! -f "$config" ]
    then
    printf "No config found, creating default config\n" >&2
    {
        echo VAR1="$var1_default" >> "$config"
        echo VAR2="$var2_default" >> "$config"
        echo VAR3="$var3_default" >> "$config"
        echo PASSWORD="$password_default" >> "$config"
        echo EMAL="$email_default" >> "$config"
    } >> "$config"
    fi

    . "$PWD"/read_ini.sh
    read_ini "$config"

    var1="${INI__VAR1:-${var1_default}}"
    var2="${INI__VAR2:-${var2_default}}"
    var3="${INI__VAR3:-${var3_default}}"
    password="${INI__PASSWORD:-${password_default}}"
    email="${INI__email:-${email_default}}"
}

source_variables

echo VAR1: "$var1"
echo VAR2: "$var2"
echo VAR3: "$var3"
echo PASSWORD: "$password"
echo EMAIL: "$email"