如何在Unix脚本中读取属性文件,其中key在另一个用户输入变量中

时间:2017-12-08 20:50:24

标签: bash unix

我在同一目录下面有属性文件。

cancellation.properties

内容:

TestData=My Name

我的unix脚本是abc.sh

内容:

#!/bin/ksh
. ./cancellation.properties

echo  "Please enter data to read"

read data

echo $data

在跑步时,我给出值TestData

我的输出为"TestData"

但我希望输出为"My Name"。这里需要做哪些更改,因为用户会输入密钥。

4 个答案:

答案 0 :(得分:1)

您可以使用awk来获取此信息。

取代echo $data放置:

awk -F"=" -v data=$data '$1==data{print $2}' cancellation.properties

其中说“用等号拆分cancel.properties文件中的每条记录。如果第一个字段是变量$data中的值(这是你的awk脚本中的变量data设置的那个-v标志,因为你不能直接在awk中使用shell变量)然后输出第二个字段。

此外,现在更彻底地阅读您的问题,看起来您将.properties文件包含在脚本的顶部。如果您想继续,这可能不是您的最佳答案。请参阅@cyrus对您的问题的评论,其中引用您的变量作业。

答案 1 :(得分:1)

#!/bin/bash

. <(awk -F '=' '{print $1 "=\""$2"\""}' file)

echo  "Please enter data to read"
read data
echo "${!data}"

输出:

My Name

答案 2 :(得分:0)

如果您可能希望从文件中读取其他配置数据,我建议您将属性文件视为配置而不是嵌入式脚本,并将数据放入专用结构中存储配置。像一个数组。这样的事情可能有用:

#!/usr/bin/env bash

declare -A canprop=()

while IFS='=' read -r key value; do
    [[ $key = #* ]] && continue      # handle comments
    canprop[$key]="$value"
done < cancellation.properties

printf '> %s\n' "${canprop[TestData]}"

请注意,如果在配置文件中重复$key,则此特定解决方案不起作用 - 最后一个键读取将&#34; win&#34;。但它可以节省你把所有东西都放入你的主要内容的麻烦。命名空间。

答案 3 :(得分:0)

当您不需要存储变量,并且只想显示值时,您可以这样做:

read -p "Please enter data to read: " data
grep "^${data}=" ./cancellation.properties | cut -d"=" -f2-