Variable persistante (bash, sed)
Un petit truc pour rendre une variable (numérique) persistante pour un script.
Code:
1 2 3 4 5 6
| #!/bin/bash
Persist() { # 1:Expression like VARIABLE=Value (numeric)
local V=${1%=*}
eval "$1"
sed -i "s/^$V=[0-9][0-9]*/$1/" $0 || return 1
} |
Et l'utilisation
Code:
1 2 3 4 5
| # BEGIN
AA=12
read -p "Entrez une valeur : " NEW_AA
# je passe la vérification de valeur numérique ...
[ $NEW_AA != $AA ] && Persist AA=$NEW_AA |
Et le tour est joué :pingoin2:
Maintenant, pour les spécialistes des expressions régulières et de sed : S'il y a des propositions pour étendre ça aux autres types de variables, ce sera bienvenu :)
Variable persistante entre deux exécutions d'un shell
Ce post traite de la conservation des valeurs de variables entre 2 exécutions d'un shell.
Le principe est : lors de l'exécution d'un shell on affecte à une variable la valeur "ABCD" ; et au début de l'exécution suivante, cette variable vaut encore "ABCD".
Cette technique est localisée au shell : elle n'utilise aucun élément externe au shell. Elle évite par exemple d'avoir à utiliser un fichier de sauvegarde distinct, qu'il faudrait écrire puis relire.
L'exemple concerne les saisies : lors d'un première exécution, la valeur saisie par l'utilisateur est rendue persistante. A l'exécution suivante, cette valeur est proposée comme valeur par défaut pour la saisie.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
# ******************************************************************************************
# Description : Saisie persistante d'une variable dans un shell
# La valeur saisie est conservee entre 2 lancements du shell
# Elle est conservee directement dans le shell (pas de fichier annexe)
# La valeur saisie est proposee par defaut lors de la saisie suivante
# Auteur : JLCAT
# ******************************************************************************************
# Fonction de saisie - $1 : invite de saisie, $2 : nomvar
# -------------------------------------------------------
saisie () {
nomvar=$2 ; eval valvar=\$$nomvar
echo -n "$1 (defaut=$valvar) : " ; read newval
if [ "$newval" != "" ] ; then
awk -v newval="$newval" -v nomvar="$nomvar" -v q='"' '{print (substr($0,1,length(nomvar)+1)==nomvar "=") ? nomvar "=" q newval q : $0}' $0 >$0.new ; chmod 777 $0.new ; mv $0.new $0
eval $nomvar="\"$newval\""
fi
}
# Programme de test
# -----------------
nomAuteur="Marcel Duchamp"
saisie "Nom de l'auteur" nomAuteur |