Correction shell

Fermé
dino - 14 déc. 2005 à 10:25
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 - 14 déc. 2005 à 17:54
bonjour

je suis debutant dans la programmation shel,j'essaye d 'ecrire un tout peitit script qui calcule le nbr de fichier et rep. s'il la trouve > 4 il efface ceux qui commence par a sinon il dit "le nombre de fichier est inferieur a 4 ,mais qd je l'execute ,sachant qu le nombre est <4 il me renvoit ce message :
rm: ne peut évaluer par lstat() `a*': Aucun fichier ou répertoire de ce type
pour quoi il m'ecrit pas ce que je lui demande

Voici mon script :
if ls -ltr|wc -l >=4
rm a*
then
echo "le nombre de fichier est inferieure a 4"
fi


Merci pour votre aide
A voir également:

1 réponse

crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 506
14 déc. 2005 à 17:54
Salut,
Le shell n'est pas un langage de programmation comme les autres...
Voici comment tu peux evaluer le nombre d'entrées (sans . et ..) dans un dossier
que ces entrées soient des fichiers ou des dossiers.
#!/bin/sh
NB=`ls -1 | wc -l`
if [ $NB -ge 4 ] ; then
    echo "Au moins 4 entrées ($NB)"
else
    echo "Moins de 4 entrées ($NB)"
fi

Pour l'explication de '[ $NB -ge 4 ]' => man test

Si tu veux vraiment compter les fichiers et effacer les 4 plus anciens :
#!/bin/sh
FILES="" NB=0
for f in `ls -1tr` ; do
    [ -f $f ] || continue
    FILES="$FILES $f"
    NB=`expr $NB + 1`  ## peut être remplacer par $((NB++)) en bash
    if [ $NB -ge 4 ] ; then
        echo "Plus de 4"
        echo "Les plus anciens = $FILES"
        break
    fi
done

Pour effacer les fichiers remplacer le echo "... $FILES" par rm $FILES
A+, crabs
0