Pourquoi ma variable ne semble-t-elle pas s'incrémenter dans mon bash en boucle?

Je suis assez nouveau à l'écriture de scripts bash. Je n'arrive pas à obtenir la valeur correcte de mon comptage des variables à afficher à la fin d'un while boucle dans mon script bash.

Contexte: j'ai une tâche relativement simple: je voudrais faire passer un fichier texte contenant une liste de chemins d'accès aux fichiers d'un script bash, vérifier l'existence de ces fichiers, et de compter le nombre de/fichiers manquants. J'ai obtenu la plupart de que le script fonctionne, sauf pour le comptage de la partie.

N=0
correct=0
incorrect=0
cat $1 | while read filename ; do
    N=$((N+1))
    echo "$N"

    if ! [ -f $filename ]; then

        incorrect=$((incorrect+1))
    else
        correct=$((correct+1))

    fi

done

echo "# of Correct Paths: $correct"
echo "# of Incorrect Paths: $incorrect"
echo "Total # of Files: $N"

Si j'ai une liste de 5 fichiers, 4 qui existent, je m'attends à obtenir la sortie suivante (notez le echo commandement au sein de la while boucle):

1
2
3
4
5
# of Correct Paths: 4
# of Incorrect Paths: 1
Total # of Files: 5

Au lieu de cela, je reçois:

1
2
3
4
5
# of Correct Paths: 0
# of Incorrect Paths: 0 
Total # of Files: 0

Ce qui s'est passé pour les valeurs de ces variables? Google a beaucoup de suggestions de qualité discutable et je pense que je pourrais l'obtenir pour fonctionner avec un peu plus de recherche, mais une brève explication de ce que je fais mal serait très utile.

source d'informationauteur williampli