Correction shell

dino -  
crabs Messages postés 909 Statut Membre -
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
Configuration: linux

1 réponse

  1. crabs Messages postés 909 Statut Membre 507
     
    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