在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脚本,并且我了解我的方法不完整,可能不是最佳实践。谁能帮我?
答案 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"