shell读取或者修改ini文件

cfg_find(){
    file_name=$1
    labelname=$2
    key=$3
    labelline=$(grep -n "^[.*]$" $file_name | awk -F ':' '{print $1}')
    lineinfo=$(grep -n "^[.*]$" $file_name | awk -v labelname="$labelname" -F ':' '{a[NR]=$1;b[NR]=$2} END{for(i=0;i<length(b);i++){if(b[i-1]==labelname){print a[i-1],a[i]}}}')
    lable_lines=()
    total_line=$(cat $file_name | wc -l)
    for line in $lineinfo
    do
        start_line=$(echo $line | awk '{print $1}')
        end_line=$(echo $line | awk '{print $2}')
        if [ -z $end_line ]
        then
            $end_line=$total_line
        fi
        if [ ! -z $start_line ] || [ ! -z $end_line ]
        then
            keyinfo=$(cat $file_name | head -n $(($end_line-1)) | tail -n "+"$start_line | grep -n $key | tail -n 1 | sed 's/ //g')
            sub_line=$(cat $keyinfo | grep -n "^"$key"=" | awk -F ':' '{print $1}')
            if [ ! -z sub_line ]
            then
                $lable_lines[${#lable_lines[@]}]=$(($start_line+$sub_line-1))
            fi
        fi
    done
    return $lable_lines
}

cfg_get(){
    file_name=$1
    labelname=$2
    key=$3
    cfg_find $file_name $labelname $key
    lable_lines=$?
    if [ ${#lable_lines[@]} -eq 0 ]
    then
        return ''
    else:
        ln=$lable_lines[${#lable_lines[@]}]
        key_value=$(cat $file_name | sed -n $ln"p")
        value=$(echo $key_value | awk -F '=' '{print $2}')
        return $value
    fi 
}

cfg_modify(){
    file_name=$1
    labelname=$2
    key=$3
    new_value=$4
    cfg_find $file_name $labelname $key
    lable_lines=$?
    if [ ${#lable_lines[@]} -eq 0 ]
    then
        return 0
    else:
        ln=$lable_lines[${#lable_lines[@]}]
        key_value=$(cat $file_name | sed -n $ln"p")
        key=$(echo $key_value | awk -F '=' '{print $1}')
        new_key_value=$key"="$new_value
        sed '"$ln"c "$new_key_value"' $file_name
        sed -n '"$ln"p' $file_name
        return 1
    fi
}

  

原文地址:https://www.cnblogs.com/navysummer/p/11679211.html