119 lines
4.0 KiB
Bash
Executable File
119 lines
4.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
|
|
|
function display_help() {
|
|
local OENC="$UTF8"
|
|
uecho "$scriptname: Activer ou désactiver un paramètre dans un fichier de configuration
|
|
|
|
USAGE
|
|
$scriptname [options] config name[=value]...
|
|
|
|
OPTIONS
|
|
-e
|
|
Activer le paramètre (par défaut). Si le paramètre existe, mais est
|
|
commenté, il est décommenté. Si une valeur est spécifiée pour le
|
|
paramètre, le paramètre est modifié dans le fichier en conséquence.
|
|
-q
|
|
Cette option s'utilise avec l'option -e et le type shell. Elle permet
|
|
de s'assurer que les valeurs ayant des espaces et/ou des caractères
|
|
spéciaux sont quotées
|
|
-d
|
|
Désactiver le paramètre. Le paramètre est commenté s'il existe dans le
|
|
fichier
|
|
-a
|
|
Ajouter une valeur à la variable, ou un paramètre avec cette valeur
|
|
(suivant le type de fichier de configuration)
|
|
-A
|
|
Ajouter une valeur au tableau, ou un paramètre avec cette valeur
|
|
(suivant le type de fichier de configuration)
|
|
-t TYPE
|
|
Type de fichier de configuration. TYPE peut être sh (par défaut), apache
|
|
ou mysql.
|
|
shell
|
|
les paramètres sont de la forme 'name=value', et les commentaires
|
|
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
|
|
ayant ces caractéristiques, dont les fichiers de script shell
|
|
apache
|
|
les paramètres sont de la forme 'name value', et les commentaires
|
|
débutent par '#'. Ce type peut être utilisé pour tous les fichiers
|
|
ayant ces caractéristiques, dont les fichiers de configuration
|
|
apache
|
|
mysql, php
|
|
les paramètres sont dans des sections nommées de la forme [section],
|
|
sont de la forme 'name=value', et les commentaires débutent par '#'
|
|
ou ';'
|
|
Ce type peut être utilisé pour tous les fichiers ayant ces
|
|
caractéristiques, dont les fichiers de configuration de mysql et de
|
|
php. Avec ce type, la section est obligatoire.
|
|
-s SECTION
|
|
Avec le type mysql, préciser la section dans laquelle inscrire le
|
|
paramètre. Attention! La section DOIT exister, elle n'est pas créée
|
|
automatiquement."
|
|
}
|
|
|
|
source "$(dirname "$0")/ulib/ulib" &&
|
|
urequire DEFAULTS conf ||
|
|
exit 1
|
|
|
|
action=enable
|
|
quoted=
|
|
type=auto
|
|
section=
|
|
parse_opts "${PRETTYOPTS[@]}" \
|
|
--help '$exit_with display_help' \
|
|
-e action=enable \
|
|
-q quoted=1 \
|
|
-d action=disable \
|
|
-a action=append \
|
|
-A action=array_append \
|
|
-t: type= \
|
|
--shell type=shell \
|
|
--apache type=apache \
|
|
--mysql type=mysql \
|
|
--php type=mysql \
|
|
-s: section= \
|
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
|
|
|
config="$1"; shift
|
|
[ -f "$config" ] || touch "$config" || die
|
|
|
|
if [ "$type" == auto ]; then
|
|
# essayer de deviner le type
|
|
[ -f "$config" ] && first_lines="$(head -n5 <"$config")" || first_lines=
|
|
name="$(basename "$config")"
|
|
MYSQL_NAMES=(my.cnf php.ini)
|
|
APACHE_NAMES=(apache{,2}.conf httpd.conf)
|
|
# ... d'abord sur la base du nom
|
|
if array_contains MYSQL_NAMES "$name"; then
|
|
type=mysql
|
|
elif array_contains APACHE_NAMES "$name"; then
|
|
type=apache
|
|
# ... puis sur la ligne de mode
|
|
elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: sh .*-\\*-" <<<"$first_lines"; then
|
|
type=shell
|
|
elif quietgrep "^[ $TAB]*#.*-\\*-.* mode: conf .*-\\*-" <<<"$first_lines"; then
|
|
type=apache
|
|
elif [[ "$name" == *.sh ]]; then
|
|
type=shell
|
|
elif [[ "$name" == *.conf ]]; then
|
|
type=apache
|
|
else
|
|
# type shell par défaut
|
|
type=shell
|
|
fi
|
|
fi
|
|
|
|
case "$type" in
|
|
s|sh|shell)
|
|
[ -n "$quoted" -a "$action" == "enable" ] && action=enableq
|
|
"conf_$action" "$config" "$@"
|
|
;;
|
|
a|apache)
|
|
"aconf_$action" "$config" "$@"
|
|
;;
|
|
m|mysql|p|php)
|
|
[ -n "$section" ] || die "Il faut spécifier la section avec -s"
|
|
"mconf_$action" "$config" "$section" "$@"
|
|
;;
|
|
esac
|