Problème Bash - Récupération valeur de commande

Bonjour,

j’ai un petit souscis, je dois effectuer ou non une opération en fonction du nombre de fichiers dans un répertoire mais je n’arrive pas à tester le retour de la commande `ls | wc -w`

Exemple


dtstamp=`date '+%Y%m%d'`
numfile=`ls | wc -w`

if $numfile != 2
then
        echo 'Number of files incorrect'
else
        diff $2 $3 | grep '>' | sed 's/^> //g' > $1
        if test -d archive
        then
                mv $2 archive/${dtstamp}-$2
                mv $3 ${3}.old
        fi
fi

Y’a un truc qui cloche mais je sais pas quoi, j’ai essayé


if $numfile -NE 2

et aussi

if $numfile != '2'

Mais rien ne fonctionne je passe systématiquement dans le ‘else’.

Merci de votre aide.

if [ $numfile != 2 ]

Merci beaucoup ca marche :smiley:

A quoi servent les crochets exactement ?

En fait les crochets servent à demander d’effectuer un test de l’expression en question.

On peut aussi faire

if test $numfile != 2
then
echo "OK"
else
echo "pas OK"
fi

les crochets facilitent la compréhension:

[ $a -gt $b ] => test $a -gt $b

c’est la valeur renvoyée par la commande qui est interprétée par le if

essaie ça: $? contient le résultat du programme précedent (return 0, etc)


[ 1 -eq 0 ]
echo $?

[ 1 -eq 1 ]
echo $?

test 1 -eq 0
echo $?

test 1 -eq 1
echo $?

numfile=`ls | wc -w` met le résultat de la commande dans la variable en tant que chaine de caractère et pas entier.

sinon pour le $?, c’est pas dit que tu ais la valeur attendu dedans, cela dépends de ce que retourne wc, soit le même résultat qu’affiché, soit simplement 0 ou une valeur différente en cas d’erreur.

je sais je sais, je ne fait que donner des problèmes et pas des solutions…