繁体   English   中英

如何使用shell脚本读取属性文件

[英]How to read properties file using shell script

如何使用 shell 脚本读取config.properties文件?

示例文件:

key1 = This is 1st value

key2 = this is 2nd value

key3
  1. 显示所有键和值。
  2. 如何检查哪个键没有价值?
  3. 输入任何键相关值显示的键。

请尝试以下操作:

#!/bin/bash

# Read configuration into an associative array
declare -A CONFIG
# IFS is the 'internal field separator'. In this case, your file uses '='
IFS="="
while read -r key value
do
    if [ -n $value ]; then
        CONFIG[$key]=$value
    else
        CONFIG[$key]=$value
    fi
done < YOUR_CONFIG_FILENAME
unset IFS

# If a parameter is passed, look it up by that, else print everything.
if [ $1 ]; then
    if [ -n ${CONFIG[$1]} ]; then
        echo "Key: $1, Value: ${CONFIG[$1]}"
    else
        echo "The key '$1' does not exist"
    fi
else
    for key in "${!CONFIG[@]}"; do
        if [ -n ${CONFIG[$key]} ]; then
            echo "Key: $key, Value: ${CONFIG[$key]}"
        else
            echo "Key: $key has no value"
        fi
    done
fi

exit $?

它将读取配置文件中的所有键名,并通知您是否未针对键设置任何值,以满足您的要求(1)和(2)。

我不太了解(3)的要求

“ 3)输入与键有关的值显示的任何键”用该要求更新脚本。

你可以试试看 它也包含数据库操作:如果您清楚地了解此代码,则可以获得所需的所有答案

  #!/bin/bash
    PROPERTY_FILE=filename.properties

    function getProperty {
       PROP_KEY=$1
       PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`
       echo $PROP_VALUE
    }

    echo "# Reading property from $PROPERTY_FILE"
    DB_USER=$(getProperty "db.username")
    DB_PASS=$(getProperty "db.password")
    ROOT_LOC=$(getProperty "root.location")
    echo $DB_USER
    echo $DB_PASS
    echo $ROOT_LOC
    echo "Writing on DB ... "
    mysql -u$DB_USER -p$DB_PASS dbname<<EOFMYSQL

    update tablename set tablename.value_ = "$ROOT_LOC" where tablename.name_="Root directory location";
    EOFMYSQL
    echo "Writing root location($ROOT_LOC) is done ... "
    counter=`mysql -u${DB_USER} -p${DB_PASS} dbname -e "select count(*) from tablename where tablename.name_='Root directory location' and tablename.value_ = '$ROOT_LOC';" | grep -v "count"`;

    if [ "$counter" = "1" ]
    then
    echo "ROOT location updated"
    fi

这是我在项目中使用的(bash)脚本的简化版本:

# reading CONFIG FILE
# usage: readConf <fileName> <several variable names>
function readConf {
local confFile=$1
shift
local allowedVars="$@" # only specified variable names will be processed
local forbidden=" #@%*()<>~'\"{}[]\$"

for VN in $allowedVars; do
    unset $VN
done

while IFS== read -r key val ; do
    var=${key//["$forbidden"]}
    if [[ " ${allowedVars[@]} " =~ " $var " ]]; then
    val=${val//["$forbidden"]}
    eval "${var}=\"${val}\""
    else
    if ! [ -z $var ]; then
        echo "conf parameter: \"$var\" is not supposed to be defined in \"$confFile\""
    fi
    fi
done < <(grep -v "^#" $confFile)
}

它扫描配置文件(第一个参数)以获取指定参数(剩余参数)。 某些“禁止符号”被忽略以避免代码注入。 以“#”开头的行将被忽略。

暂无
暂无

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

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