[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Re: shell script



Nicolas Couture wrote:

>On Saturday 22 June 2002 09:28 pm Gilles J. Seguin <[email protected]> wrote 
>in <[email protected]>:
>
>  
>
>>Nicolas Couture wrote:
>>    
>>
>>>Salut,
>>>
>>>Je suis entrain d'ecrire une petite utilitee en shell script
>>>et je rencontre un petit probleme:
>>>
>>>Je souhaites comparer 2 fichier de la facon suivante:
>>>
>>>diff md5sum md5sum.old  | grep "<" | cut -d " " -f2,4
>>>
>>>cependant, s'ils ne retournent aucun output je ne veux pas
>>>executer cette suite de commandes.
>>>      
>>>
>>$ man grep
>>[...]
>>    Normally, exit status is 0 if selected lines are found and
>>    1 otherwise.  But  the  exit  status  is  2  if  an  error
>>    occurred,
>>diff -q md5sum md5sum.old > tata
>>if test $? -eq 0; then
>>  #faire les autres choses.
>>  grep "<" tata
>>fi
>>    
>>
>
>Je n'ai pas reussi a applique cette solution.
>J'ai parcontre trouve une solution:
>
>if [ "$(diff suid suid.old | grep ">" | cut -d " " -f2)" = "" ]; then
>        echo "No new suid files found."
>fi
>
>pourrais-tu m'expliquer ta solution `if test $? -eq 0; then` ce que je ne 
>comprends pas est ce que representes test et sur quoi appliques tu les 
>options -eq 0 .. qu'est ce que $? ?
>
test est une commande populaire aussi connu sous le nom de '['.
autrement dit if [ $? -eq 0 ]; est équivalent à if test -eq 0; (le ] est 
un argument optionnel
ignoré par test),

Pour ton script, le diff n'est pas la meilleure solution car il ne 
garantie pas que les lignes précédé d'un > seront les nouvelles du 
fichiers.  Si tu veux vraiment que le neuf,

# Extrait les lignes nouvelles de suid vs. suid.old
(cat suid suid.old | sort | uniq -u; cat suid) | sort | uniq -d > suid.new
# sort trie les lignes en ordre (nécessaire pour uniq)
# uniq -u n'imprime que les lignes uniques
# uniq -d n'imprime que les lignes dupliquées (une seule fois)
# cat suid suid.old | sort | uniq -u récupère donc les lignes qui 
n'appartiennent
# qu'à un seul des deux fichiers
# on ajoute ensuite le contenu du nouveau fichier: cat suid
# L'ensemble de la sortie sera trié et seule les lignes dupliquées 
(appartenant
# donc à la fois aux lignes uniques des deux fichiers et à suid
# seront sélectionnées ( | sort | uniq -d )
# 'test -s file' vérifie si le fichier a une taille plus grande que zéro.
if [ -s suid.new ]; then
  echo "proceed suid.new";
else
  echo "No new suid files found."
fi

A+
Fabien