Introduction UNIX 6 eme leçon Jürgen Brunner CPPM Session TP Rappel leçon 5 Solutions TP5 Function recursive
Rappel leçon 5 Variables Reference indirect Manipuler caractères dans les variables Tableaux Fonctions bc : arithmétique au-delà des entiers
Etapes de travail 1. Conception 1. Quels outils à utiliser 2. Définitions des étapes de solutions 2. Écriture de code 3. Tester et déverminer 4. Boucler sur 2 et 3
Test script #!/bin/bash for f in */param.bash do echo -n "+++ $f ++++++ " $f $@ <<EOD 1 EOD done
no parameters +++ benzenine/param.bash ++++++ Donner au moins un paramètre +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: -lt: unary operator expected Le nombres de parametres est: 0 Le premier de à lã ment est: +++ garreauteiki/param.bash ++++++????? +++ Grimaldos/param.bash ++++++ Veuillez entrer au moins un argument svp +++ gueye/param.bash ++++++ pas assez d'argument +++ hubac/param.bash ++++++ Pas assez d'arguments +++ kazi/param.bash ++++++ Donnez un parametre SVP +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10' +++ mechouahi/param.bash ++++++ pas d argument +++ Sabir_Abidi/param.bash ++++++ liste darguments +++ seye/param.bash ++++++ veuillez donnez un argument au moins +++ touatiilies/param.bash ++++++ donner au moins un argument +++ toutendji_yoann/param.bash ++++++ Il y a 0 arguments Le premier argument est: +++ Velly_Philippe/param.bash ++++++ liste darguments +++ Violette/param.bash ++++++ Veuillez entrer au moins 1 argument la prochaine fois +++ WEISS/param.bash ++++++ Veuillez spécifier un argument
10 parameters +++ benzenine/param.bash ++++++ le nombre dargument = 10 le premier argument est : a le dixième argumet est: j +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: a: integer expression expected Le nombres de parametres est: 10 Le premier de à lã ment est: a Dixià me parametres j +++ garreauteiki/param.bash ++++++ il y a 10 argument(s) le premier argument est: a le dixieme argument est: j +++ Grimaldos/param.bash ++++++ Le premier argument est a Nb d'arguments = 10 Le dixième argument est a0 +++ gueye/param.bash ++++++ nombre d'arguments : 10 premier argument : a 10eme argument : +++ hubac/param.bash ++++++ Nombre d'arguments : 10 Valeur du premier argument : a Valeur du dixième argument : j +++ kazi/param.bash ++++++ le Nbr des arguments est : 10 le premier argument est : a le dixieme argument est : j +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
10 parameters +++ mechouahi/param.bash ++++++ nombre d'argument 10 1) a 10) j +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 10 premier argument a paramaitre numero 10: j +++ seye/param.bash ++++++ nombre d'arguments: 10 premiere argument: a dixieme argument: j +++ touatiilies/param.bash ++++++ le nombre darguments = 10 Le premier argument est : a Le dixieme argument est : j +++ toutendji_yoann/param.bash ++++++ Il y a 10 arguments Le premier argument est:a Le dixieme argument est:j +++ Velly_Philippe/param.bash ++++++ le premier argument est a le deuxiemme argument est b il y a 10 +++ Violette/param.bash ++++++ Il y a 10 arguments Le premier argument est a Le dixième argument est a0 +++ WEISS/param.bash ++++++ Nombre d'arguments=10 Argument 1) a, Argument 10) j,
1 parameter invalid +++ benzenine/param.bash ++++++ erreur:ce paramètre n'existe pas benzenine/param.bash: line 17: exit1: command not found benzenine/param.bash: line 19: [: -h/$: unary operator expected benzenine/param.bash: line 22: [: -d/$: unary operator expected +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: a: integer expression expected +++ garreauteiki/param.bash ++++++ inconnu au bataillon +++ Grimaldos/param.bash ++++++ Le premier argument est a Le fichier/dossier que vous cherchez n'existe pas +++ gueye/param.bash ++++++ nombre d'arguments : 1 erreur a n'existe pas dans la racine / +++ hubac/param.bash ++++++ Nombre d'arguments : 1 /a n'existe pas +++ kazi/param.bash ++++++ le Nbr des arguments est : 1 erreur : ce parametre n'esxiste pas +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
1 parameter invalid +++ mechouahi/param.bash ++++++ nombre d'argument 1 ls: a: No such file or directory +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 1 premier argument a ls: /a: No such file or directory +++ seye/param.bash ++++++ nombre d'arguments: 1 +++ touatiilies/param.bash ++++++ le nombre darguments = 1 erreur : ce parametre n'existe pas +++ toutendji_yoann/param.bash ++++++ Il y a 1 arguments a n'existe pas +++ Velly_Philippe/param.bash ++++++ le premier argument est a ls: /a: No such file or directory +++ Violette/param.bash ++++++ Il y a 1 arguments Votre fichier/dossier n'existe pas +++ WEISS/param.bash ++++++ Nombre d'arguments=1 ls: a: No such file or directory ls: a: No such file or directory Ca marche pas
1 parameter : file +++ benzenine/param.bash ++++++ le nombre dargument = 1 erreur:ce paramètre n'existe pas benzenine/param.bash: line 17: exit1: command not found benzenine/param.bash: line 19: [: -h/$: unary operator expected benzenine/param.bash: line 22: [: -d/$: unary operator expected +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [:.autofsck: integer expression expected +++ garreauteiki/param.bash ++++++ C est un fichier +++ Grimaldos/param.bash ++++++ Le premier argument est.autofsck Le fichier/dossier que vous cherchez existe +++ gueye/param.bash ++++++ nombre d'arguments : 1 +++ hubac/param.bash ++++++ Nombre d'arguments : 1 /.autofsck existe +++ kazi/param.bash ++++++ le Nbr des arguments est : 1 erreur : ce parametre n'esxiste pas +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
1 parameter : file +++ mechouahi/param.bash ++++++ nombre d'argument 1 -rw-r--r-- 1 root root 0 Oct 9 08:39.autofsck erreur +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 1 largument est un fichier coco +++ seye/param.bash ++++++ nombre d'arguments: 1 +++ touatiilies/param.bash ++++++ le nombre darguments = 1 +++ toutendji_yoann/param.bash ++++++ Il y a 1 arguments.autofsck est un fichier +++ Velly_Philippe/param.bash ++++++ le premier argument est.autofsck argument est un fichier coco +++ Violette/param.bash ++++++ Il y a 1 arguments Votre fichier/dossier a été trouvé +++ WEISS/param.bash ++++++ Nombre d'arguments=1 -rw-r--r-- 1 root root 0 Oct 9 08:39.autofsck Ca marche -rw-r--r-- 1 root root 0 Oct 9 08:39.autofsck
1 parameter : link +++ benzenine/param.bash ++++++ le nombre dargument = 1 erreur:ce paramètre n'existe pas benzenine/param.bash: line 17: exit1: command not found benzenine/param.bash: line 19: [: -h/$: unary operator expected benzenine/param.bash: line 22: [: -d/$: unary operator expected +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: cern: integer expression expected +++ garreauteiki/param.bash ++++++ **** c est un lien symbolique **** +++ Grimaldos/param.bash ++++++ Le premier argument est cern Le fichier/dossier que vous cherchez existe Cet argument est un lien symbolique +++ gueye/param.bash ++++++ nombre d'arguments : 1 ce fichier existe et c'est un lien soft +++ hubac/param.bash ++++++ Nombre d'arguments : 1 /cern existe /cern est un lien soft +++ kazi/param.bash ++++++ le Nbr des arguments est : 1 erreur : ce parametre n'esxiste pas +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
1 parameter : link +++ mechouahi/param.bash ++++++ nombre d'argument 1 lrwxrwxrwx 1 root root 15 Oct 2 2007 cern -> /atlinux/cernsl erreur +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 1 largument est un lien symbol +++ seye/param.bash ++++++ nombre d'arguments: 1 Nous avons un lien symbolique +++ touatiilies/param.bash ++++++ le nombre darguments = 1 ce parametre est un lien symbolique +++ toutendji_yoann/param.bash ++++++ Il y a 1 arguments cern est un lien +++ Velly_Philippe/param.bash ++++++ le premier argument est cern argument est un lien symbol +++ Violette/param.bash ++++++ Il y a 1 arguments Votre fichier/dossier a été trouvé C'est un lien symbolique +++ WEISS/param.bash ++++++ Nombre d'arguments=1 lrwxrwxrwx 1 root root 15 Oct 2 2007 cern -> /atlinux/cernsl Ca marche lrwxrwxrwx 1 root root 15 Oct 2 2007 cern -> /atlinux/cernsl
1 parameter : repertoire +++ benzenine/param.bash ++++++ le nombre dargument = 1 erreur:ce paramètre n'existe pas benzenine/param.bash: line 17: exit1: command not found benzenine/param.bash: line 19: [: -h/$: unary operator expected benzenine/param.bash: line 22: [: -d/$: unary operator expected +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: var: integer expression expected +++ garreauteiki/param.bash ++++++ c est un repertoire on a pas les droits d ecritutre +++ Grimaldos/param.bash ++++++ Le premier argument est var Le fichier/dossier que vous cherchez existe Cet argument est un répertoire Il est impossible d'écrire dedans +++ gueye/param.bash ++++++ nombre d'arguments : 1 ce fichier existe et c'est un repertoire impossible d'ecrire dans ce repertoire +++ hubac/param.bash ++++++ Nombre d'arguments : 1 /var existe /var est un répertoire /var n'est pas autorisé en écriture +++ kazi/param.bash ++++++ le Nbr des arguments est : 1 erreur : ce parametre n'esxiste pas +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
1 parameter : repertoire +++ mechouahi/param.bash ++++++ nombre d'argument 1 total 140... erreur +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 1 largument est un Repertoire +++ seye/param.bash ++++++ nombre d'arguments: 1 nous avons un repertoire +++ touatiilies/param.bash ++++++ le nombre darguments = 1 ce parametre est un repertoire on ne peut pas ecrire dans ce repertoire rm: cannot remove `temp': No such file or directory +++ toutendji_yoann/param.bash ++++++ Il y a 1 arguments Impossible d'ecrire dans le repertoire var +++ Velly_Philippe/param.bash ++++++ le premier argument est var argument est un Repertoir +++ Violette/param.bash ++++++ Il y a 1 arguments Votre fichier/dossier a été trouvé C'est un répertoire Il est impossible d'écrire dedans +++ WEISS/param.bash ++++++ Nombre d'arguments=1 total 140... Ca marche total 140
1 parameter : repertoire /tmp +++ benzenine/param.bash ++++++ le nombre dargument = 1 erreur:ce paramètre n'existe pas benzenine/param.bash: line 17: exit1: command not found benzenine/param.bash: line 19: [: -h/$: unary operator expected benzenine/param.bash: line 22: [: -d/$: unary operator expected +++ diagne/param.bash ++++++ diagne/param.bash: line 3: [: tmp: integer expression expected +++ garreauteiki/param.bash ++++++ c est un repertoire On peut y à crire +++ Grimaldos/param.bash ++++++ Le premier argument est tmp Le fichier/dossier que vous cherchez existe Cet argument est un répertoire on peut écrire dedans +++ gueye/param.bash ++++++ nombre d'arguments : 1 ce fichier existe et c'est un repertoire on peut ecrire de ce repertoire +++ hubac/param.bash ++++++ Nombre d'arguments : 1 /tmp existe /tmp est un répertoire /tmp est autorisé en écriture +++ kazi/param.bash ++++++ le Nbr des arguments est : 1 erreur : ce parametre n'esxiste pas +++ lopez/param.bash ++++++ lopez/param.bash: line 9: syntax error near unexpected token `then' lopez/param.bash: line 9: ` then echo le dixieme argument est $10'
1 parameter : repertoire /tmp +++ mechouahi/param.bash ++++++ nombre d'argument 1 total 15376... erreur +++ Sabir_Abidi/param.bash ++++++ nombre arguments: 1 largument est un Repertoire +++ seye/param.bash ++++++ nombre d'arguments: 1 nous avons un repertoire +++ touatiilies/param.bash ++++++ le nombre darguments = 1 ce parametre est un repertoire On peut ecrire dans ce repertoire rm: cannot remove `temp': No such file or directory +++ toutendji_yoann/param.bash ++++++ Il y a 1 arguments Possible d'ecrire dans le repertoire tmp +++ Velly_Philippe/param.bash ++++++ le premier argument est tmp argument est un Repertoir +++ Violette/param.bash ++++++ Il y a 1 arguments Votre fichier/dossier a été trouvé C'est un répertoire On peut écrire dedans +++ WEISS/param.bash ++++++ Nombre d'arguments=1 total 15376... Ca marche total 15376...
Solutions TP5
Résultat du logiciel légèrement erronée Lancement de Mariner 1 22 juillet 1962 Destination : Venus Logiciel pour corriger le trajet avez un minuscule bug Fuseau a été du détruit Rumeur DO 10 I=1,3 10 CONTINUE DO 10 I=1.3 10 CONTINUE
Fonction récursive #!/usr/bin/bash fac() { if [ $1 -le 1 ] ; then RESUL=1 else fac $(($1-1)) ((RESUL*=$1)) fi } if [ $# -eq 0 ] ; then echo specify number exit 1 fi fac $1 echo "factoriel $1 = $RESUL" exit 0 Example : calcul du factoriel Fonction fac() appellé récursive Variable RESUL accessible globalement Ca marche jusqu a 12 a cause du taille du résultat (32 bits)