Salut,
Il arrive souvent qu’on ait besoin dans un script shell de stocker différents paramètres d’une invocation à l’autre. Dans la plupart des cas, un bête tableau associatif (clé,valeur) est amplement suffisant mais on se retrouve souvent à bricoler un truc sur trois pattes. Du coup je ressors ce petit script de mes cartons, il se base sur SQLite pour stocker les paires de valeurs.
Accessoirement, même si le côté stockage n’est pas forcément nécessaire pour un script donné ça peut aussi servir pour des tableaux associatifs temporaires si on veut éviter d’utiliser bash.
Note : ça n’a pas vocation à être super performant, simplement à être facile d’emploi pour une utilisation ad-hoc.
Téléchargement : github.com/syam44/kvstore/tarball/master
Installation :
[code]# aptitude install sqlite3
./configure install[/code]
[size=125]Utilisation :[/size]
Un simple appel sans aucune commande va créer la base si nécessaire, et vérifier qu’elle est au bon format :
Si le fichier n’est pas une base SQLite / n’est pas au bon format, on obtient une erreur avec code de retour 2 :
$ echo "pas du sqlite" > test.db
$ kvstore test.db
Error: file is encrypted or is not a database
ERROR: SQLite reported an error. Aborting.
$ echo $?
2
Pour une invocation donnée, toutes les commandes sont traitées ou bien ensemble, ou bien pas du tout (autrement dit, si une des commandes provoque une erreur alors rien ne sera fait du tout), et dans l’ordre où elles sont placées sur la ligne de commandes (sauf -f, seule la dernière occurrence est prise en compte).
-f X utilise le texte X comme séparateur de champ lorsque des paires de valeurs (clé,valeur) sont affichées. Par défaut : |
-kv affiche toutes les paires de valeurs (clé,valeur) stockées.
-k affiche toutes les clés stockées.
-v affiche toutes les valeurs stockées.
-g K affiche la valeur correspondant à la clé K.
-m K affiche les paires de valeurs (clé,valeur) dont les clés correspondent au motif K (syntaxe glob classique d’Unix).
-s K V stocke une paire de valeurs (K,V).
-d K supprime la paire de valeurs (clé,valeur) correspondant à la clé K.
Exemples :
$ kvstore test.db
$ kvstore test.db -s "clé1" "valeur1" -s "clé2" "valeur2" -kv
clé1|valeur1
clé2|valeur2
$ kvstore test.db -f ";" -kv
clé1;valeur1
clé2;valeur2
$ kvstore test.db -d "clé1" -k
clé2
$ kvstore test.db -v
valeur2
$ kvstore test.db -f ";" -k -s "clé3" "valeur3" -g "clé3" -m "clé*" -f "/"
clé2
valeur3
clé2/valeur2
clé3/valeur3
$ kvstore -s "clé3" "autre chose" -kv
clé2|valeur2
clé3|autre chose
Voilà, si ça peut vous servir dans vos scripts alors tant mieux…