optimisation d'un script [SHELL] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 12-12-2007 à 18:02:22
Les premières lignes je ferai :
DATADIR="/home/user/$(date +%B)/$(date +%d%m%y)" |
pour être plus propre.
D'ailleurs j'aurai tendance à protéger toute les variables :
"${TOTO}" |
et pas
$TOTO |
Et aussi à remplacer
`cmd` |
par
$(cmd) |
(et en plus c'est plus simple à imbriquer)
Pour tes tests, on peut dire à grep d'être silencieux avec
greq -q |
, plus propre que
>/dev/null 2>&1 |
Enfin tu peux grouper tes tests, par exemple tout ceux qui retournent TODAY.
Un exemple de la syntaxe pour en grouper 2 :
if (grep -q -i $(date +%d/%m/%y) "${FICNAME}" || grep -q -i $(date +%m/%d/%y) "${FICNAME}" ) |
Comme tu en as beaucoup tu peux mettre le test sur plusieurs lignes :
if (grep -q -i $(date +%d/%m/%y) "${FICNAME}" \ |
en insérant un \ suivi d'un retour à la ligne.
Marsh Posté le 12-12-2007 à 18:03:34
pourquoi un chmod 777 ?
Marsh Posté le 12-12-2007 à 17:20:34
Salut la compagnie !
J'ai galeré pour écrire un script, du coup il y a plethore de condition les unes derrieres les autres.
Je suis sur qu'il existe un moyen beaucoup plus simple. La difficulté, je recherche la date du jour ou de la veille dans un fichier de log mais parfois la date est en format jj/mm/aa et d'autres fois en mm/jj/aa
Merci à vous.
#!/bin/sh
# CREATION DU REPERTOIRE DU JOUR POUR LES LOGS
mkdir -p /home/user/`date +%B`/`date +%d%m%y`/
DATADIR="/home/user/`date +%B`/`date +%d%m%y`"
# RECUPERATION DES NOMS DANS LE FICHIER DE CONF
cat /home/user/hosts.conf | grep -v "^#" | awk -F ';' '{ print $1 " " $2 }' | while read NOM ALIAS
do
# ON ATTRIBUE UNE VARIABLE POUR LE CHEMIN DU FICHIER
FICNAME="$DATADIR/$NOM.log"
# TEST SI LE FICHIER EXISTE
if [ -e $FICNAME ]
then
echo "le fichier $NOM.log est present"
# TEST SI LE FICHIER EST LISIBLE
if [ -r $FICNAME ]
then
echo "le fichier $NOM.log est lisible"
else
echo "on tente de changer les droits de $FICNAME"
chmod 777 $FICNAME >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "$NOM : KO - impossible de changer les droits pour le traitement de la verification"
continue
else
echo "les droits 777 ont bien ete changes"
fi
fi
# ON VERIFIE LA PRESENCE DE L4ALIAS DANS LE FICHIER DE LOG
if grep -i $ALIAS $FICNAME | sed '1d' >/dev/null 2>&1
then
echo "l alias a bien ete trouve dans le fichier de log"
FIC="OK"
RES=`/bin/egrep -i "Backup Operation" $FICNAME | /bin/egrep -i "Cancelled|annulée|failed|annulee"`
RESULTAT=`echo $RES | sed -e 's/\.//'`
if [ "$FICNAME" = "TEST.txt" ]
then
if grep -i `date +%m/%d/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=TODAY
else
if grep -i `date --date '1 days ago' +%m/%d/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=YESTERDAY
else
DATELOG=OTHER
fi
fi
else
if grep -i `date +%d/%m/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=TODAY
else
if grep -i `date +%m/%d/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=TODAY
else
if grep -i `date --date '1 days ago' +%d/%m/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=YESTERDAY
else
if grep -i `date --date '1 days ago' +%m/%d/%y` $FICNAME >/dev/null 2>&1
then
DATELOG=YESTERDAY
else
DATELOG=OTHER
fi
fi
fi
fi
fi
if [ -n "$RESULTAT" ]
then
STATUS=KO
else
STATUS=OK
RESULTAT="pas de probleme"
fi
if [ "$DATELOG" = "OTHER" ]
then
STATUS=KO
if grep -i `date --date '2 days ago' +%d/%m/%y` $FICNAME >/dev/null 2>&1
then
RESULTAT="erreur, le fichier de log date de l'avant veille"
else
if grep -i `date --date '2 days ago' +%m/%d/%y` $FICNAME >/dev/null 2>&1
then
RESULTAT="erreur, le fichier de log date de l'avant veille"
else
RESULTAT="erreur, fichier de log incorrect"
fi
fi
fi
echo "$NOM - $STATUS : $RESULTAT"
else
FIC=KO STATUS="prout"
echo "$NOM - KO : FICHIER $FIC $STATUS"
fi
else
HEURE=`date +%H`
if [ $HEURE -ge 0 ] && [ $HEURE -lt 3 ]
then
echo "ce n'est pas l'heure"
else
echo "$NOM - KO : Pas de fichier de log"
fi
fi
done