fruits.txt
apple
banana
orange
#!/bin/bash
cat fruits.txt | while read LINE do
echo ${LINE}
if [ $? -ne 0 ] ; then
echo "Erreur:${LINE}"
exit 1;
fi
done
echo "Réussite!"
done
C'est un programme qui récupère le contenu de fruit.txt, le transmet à l'instruction while avec un tube et le sort en standard.
Par exemple, si l'écho banane échoue, la sortie attendue est:
apple
Erreur:banana
Cependant, la sortie réelle est la suivante. Le script ne s'est pas terminé après l'erreur et le traitement suivant se poursuit.
apple
Erreur:banana
orange
Réussite!
Lors du passage à une instruction while avec un tube, la boucle while est un processus enfant du script d'origine Il sera exécuté. Par conséquent, même si vous quittez 1, seul le processus enfant sera arrêté. Le processus principal se poursuivra.
Le processus parent récupère la valeur de retour 1 du processus enfant et provoque l'arrêt anormal du processus parent.
cat fruits.txt | while read LINE do
echo ${LINE}
if [ $? -ne 0 ] ; then
echo "Erreur:${LINE}"
exit 1;
fi
done
if [ $? -ne 0 ] ; then
exit 1;
fi
Spécifier le résultat de cat dans la liste d'instructions for résoudra le problème. Si vous faites cela, vous n'avez pas besoin de définir une variable pour mettre le résultat de cat séparément, donc c'est intelligent.
for FRUIT in `cat fruits.txt`; do
echo ${FRUIT}
done
Recommended Posts