使用脚本读取Unix属性文件

时间:2018-03-12 13:46:53

标签: shell unix

我的属性文件:

a.prop  

user=abc  
location=home

user=xyz  
location=roamer

我需要读取a.prop并将用户和位置保存在变量中,以便我可以将它们作为参数传递给我的其他脚本(check.sh)。

需要为所有用户/位置列表调用check.sh。

我不想使用AWK

2 个答案:

答案 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