Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1104 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SHELL] optimisation d'un script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SHELL] optimisation d'un script

n°990747
b0uzin
Posté le 12-12-2007 à 17:20:34  profilanswer
 

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
 

mood
Publicité
Posté le 12-12-2007 à 17:20:34  profilanswer
 

n°990771
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 12-12-2007 à 18:02:22  profilanswer
 

Les premières lignes je ferai :
 

DATADIR="/home/user/$(date +%B)/$(date +%d%m%y)"
mkdir -p "${DATADIR}"


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}" \
 || grep -q -i $(date +%m/%d/%y) "${FICNAME}" )


en insérant un \ suivi d'un retour à la ligne.


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°990773
zecrazytux
Posté le 12-12-2007 à 18:03:34  profilanswer
 

pourquoi un chmod 777 ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [SHELL] optimisation d'un script

 

Sujets relatifs
Script d'arrêt sous LinuxScript QoS qui marche partiellement
Script Bash : appeler un script avec une chaîne en optionScript Shell condition répertoire vide
[Shell - awk] Redirection ">>" écrase le fichierscript shell qui recherche un mot
shell bash : decouper un motProblème de script bash sous Cygwin
Plus de sujets relatifs à : [SHELL] optimisation d'un script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR