我在同一目录下面有属性文件。
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"
。这里需要做哪些更改,因为用户会输入密钥。
答案 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-