#!/bin/sh
if
test $# -ne 1
then
echo erreur
exit
fi
if test $1 -eq 0
then
echo 1
else
n=`expr $1 - 1`
echo `expr $1 \* $($0 $n)`
fi
![]()
#!/bin/sh
if
test $# -ne 1
then
echo erreur
exit
fi
if test $1 -eq 0
then
echo 1
else
n=`expr $1 - 1`
echo `expr $1 \* $($0 $n)`
fi
![]()
et en le lançant ainsi :
sh rec_fact 4
parce qu il n y a pas d'erreur dans le script
Problème de PATH. Tu as probablement dû modifier ton PATH en rajoutant ":." pour que les scripts locaux soient appelables directement par leur nom mais en oubliant de l'exporter.
Donc quand tu lances ton script en appelant "rec_fact", il génère un processus dans lequel le PATH ne contient pas ":.". Total, quand le processus appelle $0 (à savoir "rec_fact"), le système répond "commande non trouvée".
Solution 1: appeler ton script en y incluant son chemin => ./rec_fact => il incluera ce chemin dans les appels récursifs
Solution 2: exporter le PATH => tous les processus fils auront le même PATH
Et si tu as envie de briller, tu peux montrer ce script qui a l'avantage de calculer la factorielle sans récursivité et sans boucle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #!/bin/sh if test $# -lt 1 then echo erreur exit 1 fi nb=${nb:-$1} res=`expr ${res:-1} \* $nb` nb=`expr $nb - 1` if test $nb -le 1 then test $res -ne 0 && echo $res || echo 1 exit 0 fi source $0
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager