[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Re: shell script
- To:
- Subject: Re: shell script
- From: Fabien Ninoles <>
- Date: Wed Jun 26 12:21:02 2002
- User-agent: Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.0.0) Gecko/20020529
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