我的属性文件:
a.prop
user=abc
location=home
user=xyz
location=roamer
我需要读取a.prop并将用户和位置保存在变量中,以便我可以将它们作为参数传递给我的其他脚本(check.sh)。
需要为所有用户/位置列表调用check.sh。
我不想使用AWK
答案 0 :(得分:0)
这是一个非常脆弱,不明智的解决方案,它为您的配置的每个节调用一个函数,但需要输入的确切格式,并且容易受到许多攻击媒介的攻击。使用(或者,最好不要),风险自负!
MOVEDATE
预处理输入会好得多,而且使用awk的意愿也会有所帮助。
答案 1 :(得分:0)
未测试
while read -r line; do
key=${line%%=*} # the left-hand-side of the =
case $key in
user) user=${line#*=} ;;
location) location=${line#*=} ;;
*) continue ;; # skip this line
esac
if [[ -n $user ]] && [[ -n $location ]]; then
echo "have user=$user and location=$location"
check.sh "$user" "$location"
unset user location
fi
done < a.prop
这个版本有点不可取:只是假设属性是有效的shell变量赋值。
while read -r line; do
[[ $line != *=* ]] && continue
declare "$line"
if [[ -n $user ]] && [[ -n $location ]]; then
echo "have user=$user and location=$location"
check.sh "$user" "$location"
unset user location
fi
done < a.prop
或者,假设“用户”总是出现在“位置”之前
grep -E '^(user|location)=' a.prop |
while read userline; read locline; do
declare "$userline"
declare "$locline"
echo "have user=$user and location=$location"
check.sh "$user" "$location"
done