From fca30288b517e4d89ca25dd5aed57177a448b1b3 Mon Sep 17 00:00:00 2001 From: meles Date: Wed, 7 Sep 2005 23:00:03 +0000 Subject: [PATCH] Bap: corrections --- unix/shell/boucle.tml | 19 ++++-- unix/shell/commande.tml | 27 +++++--- unix/shell/entreesortie.tml | 12 +++- unix/shell/fonction.tml | 48 +++++++------ unix/shell/index.tml | 59 ++++++++++++---- unix/shell/presentation.tml | 8 ++- unix/shell/script.tml | 132 +++++++++++++++++++++++++----------- unix/shell/test.tml | 6 +- 8 files changed, 211 insertions(+), 100 deletions(-) diff --git a/unix/shell/boucle.tml b/unix/shell/boucle.tml index b0c80a6..f264aea 100644 --- a/unix/shell/boucle.tml +++ b/unix/shell/boucle.tml @@ -13,8 +13,9 @@

Une fois que vous avez compris qu'un script n'est rien d'autre qu'une suite de commandes, vous avez fait un grand pas ; chaque script -consiste à poser des rails : l'utilisateur n'a plus qu'à les -suivre. +consiste à poser des rails : l'utilisateur n'a plus qu'à les suivre +(si tout cela ne vous paraît pas évident, consultez la page d'initiation à la programmation en shell).

Toutefois, avoir posé les rails ne suffit pas toujours : il peut @@ -769,9 +770,8 @@ code de retour 0 comme

Il existe une commande test, qui évalue des expressions booléennes (c'est-à-dire dont la valeur ne peut être que vraie ou -fausse, 1 ou 0) passées en argument, et renvoie un code de retour en -fonction du résultat. Elle est bien utile pour les scripts. -Exemple : +fausse) passées en argument, et renvoie un code de retour en fonction du +résultat. Elle est bien utile pour les scripts. Exemple :

@@ -780,12 +780,17 @@ then echo 'La variable vaut foo'
 else echo 'La variable ne vaut pas foo'
 fi
- +

+Pour en savoir plus sur les opérateurs de test, consultez la page tests et calculs arithmétiques Ou bien vous pouvez +revenir à la page centrale sur le shell, d'où +vous pourrez vous orienter vers d'autres parties du cours. +

Auteur : Baptiste Mélès. -Dernière modification le . +Dernière modification le .
diff --git a/unix/shell/commande.tml b/unix/shell/commande.tml index 5e7565b..44e595e 100644 --- a/unix/shell/commande.tml +++ b/unix/shell/commande.tml @@ -219,7 +219,7 @@ caract

Options à nom long

-

Traditionnellement, et pur des raisons de concision, la majorité +

Traditionnellement, et pour des raisons de concision, la majorité des options, sous Unix, est composée d'un tiret et d'une seule lettre. Toutefois, pour des raisons pratiques, il peut également exister des noms d'option longs ; ils sont en général @@ -244,12 +244,21 @@ pour les donner en arguments

cc -o foo bar.c gee.c buz.c gog.c
+

+(pour les curieux, sachez que cette commande sert à compiler un +programme écrit en langage C, c'est-à-dire à le traduire en langage +machine. Mais avant de vous mettre au langage C, attendez de bien +connaître le shell, il vous apprendra plus facilement et plus +agréablement les bases de la programmation...) +

+

-Pour éviter ces problèmes, on peut utiliser des jokers -(wildcards en anglais). Pourquoi ce nom ? Eh bien, dans -certains jeux de cartes, le joker permet de remplacer n'importe quelle -carte ; dans le shell, les jokers permettent de remplacer n'importe -quel caractère ou n'importe quelle séquence de caractères. +Pour éviter les problèmes liés à la frappe de longues lignes de +commandes, on peut utiliser des jokers (wildcards en +anglais). Pourquoi ce nom ? Eh bien, dans certains jeux de cartes, +le joker permet de remplacer n'importe quelle carte ; dans le +shell, les jokers permettent de remplacer n'importe quel caractère ou +n'importe quelle séquence de caractères.

@@ -487,13 +496,15 @@ commande it cmd

Vous êtes maintenant en mesure de faire ces exercices pour vous -entraîner.

+entraîner. Ou bien vous pouvez revenir à la page +centrale sur le shell, d'où vous pourrez vous orienter vers d'autres +parties du cours.

Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez. Modifications : Nicolas George, Baptiste Mélès. -Dernière modification le . +Dernière modification le .
diff --git a/unix/shell/entreesortie.tml b/unix/shell/entreesortie.tml index 48b630b..b4ee8bb 100644 --- a/unix/shell/entreesortie.tml +++ b/unix/shell/entreesortie.tml @@ -19,7 +19,7 @@ Un programme consiste transformées : il transforme des informations, et c'est pourquoi l'on parle d'informatique.

-

Prenons le programme hachoir, par exemple : on y +

Prenons un programme hachoir, par exemple : on y fait entrer des choses, elles sortent sous une autre forme, et dans l'intervalle, elles subissent des transformations régulières. Par exemple, on fait entrer une vache, il en ressort du steak haché ; @@ -248,6 +248,10 @@ ls: foo: No such file or directory Je n'ai pas de fichier foo. +

+Pour en savoir plus sur les structures de test, consultez la page sur +les tests et calculs arithmétiques. +

Redirection des sorties standard et d'erreur

@@ -381,13 +385,15 @@ premi

Vous êtes maintenant en mesure de faire ces exercices pour vous -entraîner.

+entraîner. Ou bien vous pouvez revenir à la page +centrale sur le shell, d'où vous pourrez vous orienter vers d'autres +parties du cours.

Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez. Modifications : Nicolas George, Baptiste Mélès. -Dernière modification le . +Dernière modification le .
diff --git a/unix/shell/fonction.tml b/unix/shell/fonction.tml index 65bb5f8..85953ec 100644 --- a/unix/shell/fonction.tml +++ b/unix/shell/fonction.tml @@ -35,7 +35,8 @@ L'usage des fonctions permet de :

Un programme sans fonction

-Utilisateur de TeX, vous voulez effacer régulièrement tous les fichiers +Utilisateur de TeX ou LaTeX +(ou non), vous voulez effacer régulièrement tous les fichiers .aux et .log qui polluent vos répertoires. Pour ceux qui ne connaissent pas TeX, sachez que ce sont des fichiers construits automatiquement, et que l'on peut recréer facilement à partir @@ -117,11 +118,11 @@ lignes) ; la main toutes les occurrences de ce que vous voulez changer, ce qui :

    -
  1. est fatiguant ;
  2. +
  3. est fatigant ;
  4. est fastidieux ;
  5. est, surtout, très peu fiable : si vous oubliez une occurrence ou que vous modifiez un endroit alors qu'il ne le -fallait pas, les conséquences sont parfois graves.
  6. +fallait pas, les conséquences peuvent être graves.
@@ -195,15 +196,12 @@ instruction2 } -

+

    +
  1. On commence par trouver un nom à la fonction. Vous -pouvez choisir ce nom à votre guise, par exemple liste_des_fichiers, -effacer_fichier, etc. -

    - -

    -Il est toutefois fortement recommandé : -

    +pouvez choisir ce nom à votre guise, par exemple +liste_des_fichiers, effacer_fichier, etc. Il +est toutefois fortement recommandé :
    • de ne pas donner à ses fonctions des noms de commandes @@ -213,24 +211,27 @@ d du shell (cd, alias, etc.) et les commandes externes (mutt, mozilla, etc.). Le comportement devient difficilement prévisible, et surtout, le script -sera difficile à débuguer...
    • +sera très difficile à débuguer...
    • de ne pas utiliser de signes de ponctuation, d'espaces ni -de caractères accentués dans les noms de fonction.
    • +de caractères accentués
      dans les noms de fonction ;
    -

    -Une fois que vous avez donné un nom à la fonction, notez des +

  2. + +
  3. +une fois que vous avez donné un nom à la fonction, notez des parenthèses ouvrante et fermante : ce sont elles qui indiquent à l'interpréteur du script qu'il s'agit d'une définition -de fonction. -

    +de fonction ; +
  4. -

    -Ensuite, entre accolades, notez la série des +

  5. +enfin, entre accolades, notez la série des instructions qu'il faudra exécuter à chaque appel de la fonction. -

    +
  6. +

Où définir les fonctions ?

@@ -426,10 +427,15 @@ plus facile, complexes.

+

+Vous pouvez revenir à la page centrale sur le +shell, d'où vous pourrez vous orienter vers d'autres parties du +cours. +

Auteur : Baptiste Mélès. -Dernière modification le . +Dernière modification le .
diff --git a/unix/shell/index.tml b/unix/shell/index.tml index 523d3eb..e5a1467 100644 --- a/unix/shell/index.tml +++ b/unix/shell/index.tml @@ -47,23 +47,49 @@ principales fonctionnalit

+

+Ces deux usages du shell sont tout à fait complémentaires. Pour une +utilisation quotidienne, il est important de connaître quelques bases de +l'utilisation du shell en ligne de commande ; et l'écriture de +scripts shell permet de personnaliser son système en automatisant des +tâches répétitives et fastidieuses. +

+ +

+Par ailleurs, la programmation en shell fournit un excellent marche-pied +pour apprendre la programmation. C'est un langage simple, qui permet +d'arriver rapidement à des résultats visibles. +

+ +

+Les pages que nous consacrons ici à l'apprentissage du shell vous +apprendront à manipuler cet outil précieux et puissant. Elles +sont accessibles à des débutants, même s'ils n'ont aucune connaissance +préalable avancée en informatique, ni même en mathématiques ; elles +sont accessibles à ceux qui ont une formation littéraire. +

+

Le shell en ligne de commande

Si vous souhaitez utiliser le shell en ligne de commandes, nous vous recommandons en priorité la lecture des pages suivantes :

Programmer des scripts shell

@@ -73,17 +99,22 @@ scripts), alors nous vous conseillons de lire @@ -91,7 +122,7 @@ contr Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez. Modifications : Nicolas George, Baptiste Mélès. -Dernière modification le . diff --git a/unix/shell/presentation.tml b/unix/shell/presentation.tml index 11c6742..be97cb2 100644 --- a/unix/shell/presentation.tml +++ b/unix/shell/presentation.tml @@ -178,8 +178,10 @@ Le nombre de scripts possibles est illimit autant que vous voulez, selon vos besoins : c'est ainsi que l'on personnalise son système et qu'on l'adapte à ses exigences, plutôt que l'inverse. Pour en savoir plus sur la programmation en shell, consultez -les pages consacrées à la programmation de scripts en -shell. +les pages consacrées à la programmation de scripts +en shell. Ou bien vous pouvez revenir à la page +centrale sur le shell, d'où vous pourrez vous orienter vers d'autres +parties du cours.

@@ -187,7 +189,7 @@ shell. Basé sur un polycopié de Roberto Di Cosmo, Xavier Leroy et Damien Doligez. Modifications : Nicolas George, Baptiste Mélès. -Dernière modification le . diff --git a/unix/shell/script.tml b/unix/shell/script.tml index 6dcd588..216b991 100644 --- a/unix/shell/script.tml +++ b/unix/shell/script.tml @@ -24,8 +24,8 @@ nous avons d Pour la programmation du shell, nous allons utiliser le shell sh, qui est le plus répandu et standard. Ce que nous avons vu jusqu'ici s'applique aussi bien à sh qu'à -zsh et aussi à csh, à l'exception de -setenv et de certaines redirections signalées.

+zsh et aussi à csh, à quelques exceptions +près, que nous vous signalerons en temps voulu.

Créer un script

@@ -43,9 +43,17 @@ pas un fichier binaire, ex L'interprétation signifie que chaque commande contenue dans un script doit être lue par un programme, appelé interpréteur (et non interprète, bizarrement) ; l'interpréteur analyse chaque commande -du script et la traduit en langage machine, ce qui permet l'exécution du -script. -

+du script et la traduit « à la volée » en langage machine, ce +qui permet l'exécution du script. +

+ +
+On oppose l'interprétation à la compilation, dans laquelle le programme +est traduit une fois pour toutes en langage machine, quel que +soit le nombre de ses exécutions ; tandis que le programme +interprété est traduit à la volée pour chacune de ses exécutions. Par +exemple, le langage C est un langage compilé. +

Dans le cas des scripts shell, l'interpréteur, c'est le shell lui-même. Dans d'autres langages, comme le Perl, l'interpréteur est un @@ -68,8 +76,10 @@ avez

Mais il faut savoir aussi que certains éditeurs de texte sont plus appropriés que d'autres à l'écriture de scripts shell. Par exemple, nano permet d'éditer des scripts comme tout autre -éditeur, mais quand un script fait plus d'une ligne, on commence à s'y -perdre un peu. À l'inverse, emacs et vim +éditeur, mais quand un script fait plus d'une dizaine de lignes, on +commence à s'y perdre un peu. À l'inverse, emacs et +vim offrent quelques fonctionnalités qui deviennent rapidement indispensables :

@@ -89,11 +99,9 @@ script qui ressemble #!/bin/sh # Fichier "vote-nir" -echo "Êtes-vous favorable au remplacement du NIR par le -VIR ?" +echo "Êtes-vous favorable au remplacement du NIR par le VIR ?" select opinion in Pour Contre -do -case $opinion in +do case $opinion in # Laisser passer ceux qui répondent correctement à la question "Pour"|"Contre") break;; # Au cas où des zozos tapent sur autre chose que 1 ou 2 @@ -113,18 +121,17 @@ ceci :

#!/bin/sh # Fichier "vote-nir" -echo "Êtes-vous favorable au remplacement du NIR par le -VIR ?" -select opinion in Pour Contre - do - case $opinion in - # Laisser passer ceux qui répondent correctement à la - question - "Pour"|"Contre") break;; +echo "Êtes-vous favorable au remplacement du NIR par le VIR ?" - # Au cas où des zozos tapent sur autre chose que 1 ou 2 - "*") continue;; - esac +select opinion in Pour Contre + do + case $opinion in + # Laisser passer ceux qui répondent correctement à la question + "Pour"|"Contre") break;; + + # Au cas où des zozos tapent sur autre chose que 1 ou 2 + "*") continue;; + esac done # M'envoyer le résultat par mail @@ -134,14 +141,16 @@ echo "$opinion" | mail bourdieu

Les deux scripts sont interprétés exactement de la même façon : l'interpréteur ignore les espaces et les lignes vides. Mais avec l'indentation, on perçoit immédiatement (en tout cas, beaucoup plus -vite) la structure logique du script.

+vite) la structure logique du script.

La coloration syntaxique
-

Les éditeurs comme emacs et vim analysent -automatiquement le statut des différents mots et symboles que vous tapez -et les colorent logiquement. Par exemple, avec emacs, vous pouvez -avoir :

+

Les éditeurs comme emacs et +vim +analysent automatiquement le statut des différents mots et symboles que +vous tapez et les colorent logiquement. Par exemple, avec emacs, vous +pouvez avoir :

  • les commentaires en rouge ;
  • @@ -360,11 +369,44 @@ caract echo "Ce que je tape ici sera lu." +

    +Les lignes de commentaire sont tout bonnement ignorées par +l'interpréteur. Alors, allez-vous demander, à quoi servent-elles si +elles ne servent à rien ? Elles sont indispensables pour tout +programmeur, car elles lui permettent de « commenter » son +programme, c'est-à-dire d'écrire ce qu'il veut, comme dans la marge d'un +livre. +

    + +

    +Les commentaires jouent pour beaucoup dans la lisibilité d'un programme +par un humain. Car les lignes de commande pures sont relativement +austères ; des commentaires permettent de les décrire à l'intention +d'un être humain. +

    + +

    +Sans doute allez-vous vous demander quel être humain cela peut bien +intéresser. Eh bien, quelqu'un d'autre que vous qui lit ce code ; +ou bien vous-même, dans un mois, un an, une décennie, ou plus, quand +vous aurez tout oublié de ce programme et de son fonctionnement. +

    + +

    +N'hésitez donc pas à recourir abondamment aux commentaires, qui +accroissent la lisibilité de votre programme, même s'ils n'ont +absolument aucune influence directe sur son fonctionnement intrinsèque. +

    + + +

    Lignes blanches

    +

    Les lignes blanches ne sont pas interprétées non plus. N'hésitez donc surtout pas à espacer votre script, les lignes blanches ne consomment presque rien en termes d'espace disque, ce -n'est donc pas une ressource rare. +n'est donc pas une ressource rare ; et elles facilitent +considérablement la lecture pour un être humain.

    L'impératif de lisibilité

    @@ -432,10 +474,8 @@ Exercice : francisez ce script.

    La commande echo

    -La commande echo sert à afficher du texte sur la sortie -standard (pour savoir ce qu'est la sortie standard, consultez la page -sur les entrées et sorties). Chaque -ligne de texte est écrite sur une ligne à part. Exemple : +La commande echo sert à afficher du texte. Chaque ligne de +texte est écrite sur une ligne à part. Exemple :

    @@ -608,7 +648,7 @@ echo "Les pattes, surtout la gauche."
     
     

    Vous connaissez maintenant les bases de la programmation en shell. Vous -avza déjà de quoi écrire de nombreux scripts qui peuvent vous faciliter +avez déjà de quoi écrire de nombreux scripts qui peuvent vous faciliter la vie de tous les jours. Pour cela, lorsque vous ressentez un besoin, ne vous demandez pas si vous avez les connaissances requises pour écrire un programme donné, mais plutôt comment, à partir de vos @@ -617,26 +657,36 @@ connaissances actuelles, vous pourriez le r

    Pour poursuivre votre apprentissage, vous pouvez passer à la lecture des -pages suivanets : +pages suivantes :

    +

    +Ou bien vous pouvez revenir à la page centrale sur +le shell, d'où vous pourrez vous orienter vers d'autres parties du +cours. +

    Auteur : Baptiste Mélès. -Dernière modification le . +Dernière modification le .
    diff --git a/unix/shell/test.tml b/unix/shell/test.tml index 19e7aed..cecd7c2 100644 --- a/unix/shell/test.tml +++ b/unix/shell/test.tml @@ -120,7 +120,7 @@ elles sont ex
     # Troisième cas
    -[ ! -f foo ] && echo "Le fichier foo n'existe pas.
    +[ ! -f foo ] && echo "Le fichier foo n'existe pas."
     Le fichier foo n'existe pas.
     
    @@ -132,7 +132,7 @@ code de retour est 1, et les commandes sont ex
     # Quatrième cas
    -[ ! -f foo ] || echo "Le fichier foo existe.
    +[ ! -f foo ] || echo "Le fichier foo existe."
     

    Voici la dernière combinaison possible. Le code de @@ -417,7 +417,7 @@ fi

    Auteur : Baptiste Mélès. -Dernière modification le . +Dernière modification le .