Fonction bash pour édition des paramètres d'un fichier de config

Update 20/05/2015: Ajout d'échappement. J'en avais besoin pour écrire du PHP.

Un petit script pour éditer les paramètres d'un fichier de config type INI.
Prends en paramètre une liste de fichiers sur lesquels appliquer la modification, la clé, la valeur et la section sur laquelle s'applique la clé.

Faite par votre serviteur.

# setIniKey files key value section
function setIniKey
{
    key=$2
    value=$3
    section=$4
    escapedKey=$(echo $key | sed -e 's/[]\/$*.^|[]/\\&/g')
    escapedValue=$(echo $value | sed -e 's/[]\/$*.^|[]/\\&/g')
    escapedSection=$(echo $section | sed -e 's/[]\/$*.^|[]/\\&/g')
    for ini in $(ls $1 2>/dev/null); do
        if ! grep -E "[#; ]*$escapedKey\s*=" $ini > /dev/null
        # Key is not in file
        then
            if [ -z "$4" ]
            then
                # There is no section, add to the end of file
                echo "$key = $value" >> $ini
            else
                if grep -E "\[$escapedSection\]" $ini > /dev/null
                then
                    # If section is found, adds key = value just after the begining of the section
                    sed -i -e "/\[$escapedSection\]/a $escapedKey = $escapedValue" $ini
                else
                    # If section not found, adds section, followed by key = value
                    echo -e "[$4]\n$key = $value" >> $ini
                fi
            fi
        # Key is in file
        else
            sed -i -e "s/[#; ]*$escapedKey\s*=.*/$escapedKey = $escapedValue/g" $ini
        fi
    done
}

Damien Gustave

Read more posts by this author.