|
|
|
|
Salut tout le monde ,
je suis tout nouveau en script shell et j'aimerais avoir un coupt de main pour ecrire une fonction decrite comme suit:
nom de la fonction : put
description : il s'agit d'une fonction qui prend en parametre 2 arguments (<clef>=<valeur>) et qui les stocks dans un fichier sh.db qu'il cree automatique ment s'il n'existe pas deja.si une si une clef existe deja, sa valeur est remplacee par la nouvelle. merci d'avance .
Salut,
|
Salut,
bla bla bla & echo $1 $2 >> $dbfileelif [ $1 != cat dbfile | cut -d "=" -f1 ] echo "$1=$2" >> dbfile Là aussi, pas la peine de refaire une comparaison, et un simple "else" aurait suffit (puisque tu testes déjà dans la 1ère partie de la commande "if ... then"). fi } La fin c'est bon ;-)) A part qu'il manque l'appel à la fonction... put $1 $2Voilà. Allez vu ta bonne foi, je te donne ce que j'ai "pondu" (mais ce n'est pas la seule façon de faire, c'est une parmi d'autres, chacun voit ça à sa façon, et c'est loin d'être optimisé et parfait). #!/bin/bash
# script_fonction_put.sh
# Affectation des variables
DATABASE="sh.db"
# Création de la base de données
# On teste l'existence de la base de données dans le répertoire courant
# d'où a été lancé le script.
if [ ! -f "$DATABASE" ]; then
touch $DATABASE
fi
# On met en place la fonction
function put
{
# La clé (paramètre $1) existe-t-elle ?
# on liste le fichier, on filtre avec "grep" l'existence du paramètre
# et on envoie le tout dans le néant (> /dev/null) pour éviter l'affichage
# à l'écran
cat $DATABASE | grep "$1" > /dev/null
# si elle existe alors
# ici on teste le code retour de la commande "grep"
# renvoie "0" si vrai (autrement dit si le nom de la clé existe)
# renvoie "1" si faux (si la correspondance de la clé n'a pas été trouvée)
if [ "$?" -eq "0" ]; then
# création de la variable de substitution
# donc si la clé existe on la récupère ainsi que sa valeur dans
# une variable pour s'en servir plus loin
VAR=`grep "$1" $DATABASE`
# substitution de sa valeur dans le fichier
# on substitue à l'aide de "sed" les nouvelles valeurs aux anciennes
# l'option "-i" de "sed" sert à écrire directement dans le fichier
sed -i 's/'"$VAR"'/'"$1 $2"'/' $DATABASE
else
# sinon on crée la clé et sa valeur
echo $1 $2 >> $DATABASE
fi
}
# On lance la fonction avec les paramètres du script
put $1 $2;-))
Z'@+...che et Bonne Année 2006.JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Re-
[jp@Mandrake tmpfs]$ cat fichier.txt merci pour ton aide mais g kelkes soucis quand meme. l'option -i de sed ne semble pas exister et je ne comprends pas vraiment ce ke signifie cette condition : if [ "$?" -eq "0" ]; then merci de m'eclairer sur ces deux points. [jp@Mandrake tmpfs]$ cat fichier.txt | sed 's/then/alors/' > fich_temp.txt && mv -f fich_temp.txt fichier.txt [jp@Mandrake tmpfs]$ cat fichier.txt merci pour ton aide mais g kelkes soucis quand meme. l'option -i de sed ne semble pas exister et je ne comprends pas vraiment ce ke signifie cette condition : if [ "$?" -eq "0" ]; alors merci de m'eclairer sur ces deux points. [jp@Mandrake tmpfs]$ je ne comprends pas vraiment ce ke signifie cette condition : if [ "$?" -eq "0" ]; then Alors "$?" c'est le code retour de la dernière commande exécutée. Autremant dit cette variable renferme (en général) soit "0" pour une exécution réussie (vraie) de la dernière commande, soit "1" pour une exécution non réussie (fausse) et "2" pour une erreur. Un exemple sera plus parlant : [jp@Mandrake tmpfs]$ who | grep jp #jp est-il connecté ? jp :0 Jan 15 08:38 #Oui sur le "display : 0" [jp@Mandrake tmpfs]$ echo $? #On affiche le code retour de la commande 0 [jp@Mandrake tmpfs]$ who | grep arthur #arthur est-il connecté ? [jp@Mandrake tmpfs]$ echo $? 1 #Ben non il ne l'est pas ! [jp@Mandrake tmpfs]$ grep jp /etc/password grep: /etc/password: No such file or directory [jp@Mandrake tmpfs]$ echo $? 2 #le fichier "password" n'existant pas, on a un code d'erreur en retour [jp@Mandrake tmpfs]$Pour en revenir à la syntaxe : if [ "$?" -eq "0" ]; then ben on teste tout simplement le code retour de la commande précédente, c'est à dire : "cat $DATABASE | grep "$1" > /dev/null" qui comme je te l'ai commentée dans le script, teste si la variable "$1" (le premier paramètre) existe dans la base de données ($DATABASE), et si c'est le cas, le code renvoyé est "0", sinon "1". Donc si le code renvoyé est égal à "zéro" ("$?" -eq "0"), on crée une variable contenant la "clé" et sa "valeur" pour les substituer par la valeur des "paramètres "$1" et "$2". Dans le cas contraire ou "$?" renverrait "1", on crée directement la clé et sa valeur que l'on ajoute au fichier : echo $1 $2 >> $DATABASE Ouf... c'est fini ;-)) Z'@+...che et Bonne Année 2006. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |