#1 Le 19/10/2008, à 16:16
- anonyme1
[obsolète] Aide sur l'écriture d'une fonction Bash
Bonjour,
pour les besoins d'un script, j'ai besoin d'écrire une fonction qui réalise les choses suivantes :
vérifier que le paramètre de la fonction existe dans un fichier log
si oui tant mieux
si non :
1- la fonction doit exécuter une autre fonction qui possède le même nom que le paramètre
2- le paramètre devient une variable qui reçoit le résultat de l'autre fonction
3- on écrit la variable et son résultat dans le fichier log
Le fait d'utiliser le même nom pour fonction, variable et paramètre va faire hurler les puristes, mais je ne sais pas pour l'instant réussi à faire autrement.
Ci-après le code; merci à tout ceux qui le corrigeront et le rendront rigoureux.
#!/bin/bash
function temps {
temps=`echo "aujourd'hui, c'est dimanche"`
}
function LogFileReadWrite {
if cat test | grep $1; then
echo "$1 est déjà renseigné dans le fichier log"
else
echo "$1 n'est pas renseigné dans le fichier log. Il faut donc lancer la fonction $1"
$1
## écrire temps=`echo "aujourd'hui, c'est dimanche"` dans le fichier test
echo "$1=???" >> test
fi
}
LogFileReadWrite temps
Dernière modification par redrum (Le 05/01/2009, à 17:52)
#2 Le 20/10/2008, à 10:40
- chcamier
Re : [obsolète] Aide sur l'écriture d'une fonction Bash
Bonjour,
Ta fonction LogFileReadWrite c'est presque cela. Juste quelques détails à corriger.
Premier point, la commande grep peut prendre un nom de fichier en argument. Il est donc inutile de surcharger ta machine avec un cat :
cat nomfichier | grep expression ==> grep expression nomfichier
Second point, d'après ce que j'ai compris, les lignes de ton sont de la forme :
motcle=valeur
motcle étant la partie dont on doit tester l'existence :
- Il est en début de ligne
- Il est séparé de la valeur par un égal (=)
Donc l'expression à rechercher est "^motclé=" où le chapeau (accent circonflexe, "^") signifie début de la ligne.
Troisième point, il semble que la valeur devrait être le résultat de la commande ayant le même nom que le mot clé. Ainsi, il serait utile de conserver sa valeur. Il fait donc remplacer la ligne :
$1
par
valeur=`$1`
Enfin, la dernière ligne qui ajoute l'information dans le log devient :
echo $1=$valeur" >> test
Ce qui donne pour ta fonction LogFileReadWrite :
function LogFileReadWrite {
if grep "^$1="
then
echo "$1 est déjà renseigné dans le fichier log"
else
echo "$1 n'est pas renseigné dans le fichier log. Il faut donc lancer la fonction $1"
valeur=`$1`
## écrire temps=`echo "aujourd'hui, c'est dimanche"` dans le fichier test
echo "$1=$valeur" >> test
fi
}
Cordialement
CC
Hors ligne
#3 Le 20/10/2008, à 19:54
- anonyme1
Re : [obsolète] Aide sur l'écriture d'une fonction Bash
Grand merci pour ton aide.
Malheureusement, sauf si j'ai loupé quelque chose, ça ne marche pas.
Il écrit simplement : "temps=" dans le fichier test
bash ne semble pas apprécier valeur=`$i`
#4 Le 22/10/2008, à 08:55
- anonyme1
Re : [obsolète] Aide sur l'écriture d'une fonction Bash
Un p'tit up...