Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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...