La troisième version du document « Introduction à la programmation en Bash » (IUT de Rodez) vient de paraître. Elle est principalement destinée aux étudiants de niveau Licence.
Contexte
Il s’agit de la troisième révision du cours donné par Eric Sanchis à l’IUT de Rodez.
Cursus
L’IUT de Rodez, dans l’Aveyron, est un site délocalisé de l’Université Toulouse 1 Capitole. Il délivre un Bachelor Universitaire de Technologie (BUT) au bout de deux années d’études, soit quatre semestres validés.
Il est possible ensuite, toujours à l’IUT de Rodez, de prolonger les études d’une année pour atteindre le niveau Licence dans le cursus LMD (Licence-Master-Doctorat).
« Introduction à la programmation en Bash » est le support de cours du BUT Informatique.
Auteur
Eric Sanchis est Associate Professor à l’université de Laval au Québec depuis 2012. Il est aussi Maître de conférences en informatique à l’IUT Rodez où il enseigne depuis 1992, et y est membre permanent de l’équipe de recherche ARAL.
Ce cours, dispensé depuis 2007, en est à sa troisième édition.
Contenu
Bien, que contient cette ressource ? Qu’y trouve-t-on pas ou pas ?
Essentiel
Il est mentionné au point 1.1.3.
Toutefois, afin de rendre l’étude de bash plus aisée, nous n’aborderons pas sa syntaxe de manière exhaustive ; en particulier, lorsqu’il existera plusieurs syntaxes pour mettre en œuvre la même fonctionnalité, seule la syntaxe la plus lisible sera présentée, parfois au détriment de la portabilité vers les autres shells ou de la compatibilité POSIX.
Ainsi, on trouvera la forme foo $(bar baz) fuu
et non foo `bar baz` fuu
De même, il est directement question en 10.2.2 de [[
sans jamais évoquer le plus portable [
mais plus limité.
Ce choix assumé devrait permettre d’apprendre rapidement bash quand on vient d’autres langages de scripting.
Progressif
La table des matières montre un avancement progressif, et assez didactique.
Les chapitres 2 et 3 traitent de l’expansion de la ligne de commande.
Le chapitre 4 embrasse toute la problématique des méta-caractères et des expressions génériques.
Le chapitre suivant discute des redirections et tubes qui font l’autre force des shell unixiens.
Ensuite, on enchaîne sur les groupements de commandes et tout ce qui est relatif aux codes de retour.
Les chapitres 9, 11 et 12, traitent respectivement : des chaînes de caractères, des expressions arithmétiques, et des tableaux.
Les structures de contrôle du langage de programmation sont abordées aux chapitres 8 (pour case
et while
) et 10 (pour for
et if
)
Les deux derniers chapitres évoquent les alias et les fonctions.
Illustré
Les différents concepts évoqués sont accompagnés d’exemples que l’on peut reproduire.
Pour ne rien gâcher, il y a quelques exercices intéressants.
Critiques
Comme ce n’est pas une dépêche purement publicitaire, vous aurez bien entendu droit aux avis de l’équipe de rédaction.
D’abord, bash 5… Les exemples ont été en effet testés avec la version 5.1, mais il n’y à rien qui soit spécifique aux versions 4.x ou 5.x ! Pour les gourous du bash qui espéraient trouver quelque plus, il faudra passer son chemin.
Comme déjà dit, ce tutoriel va à l’essentiel en privilégiant les formes les plus lisibles. C’est une bonne chose de ne pas évoquer, quand c’est possible, les ésotérismes du shell…
Par contre, la présentation des exemples peut dérouter quand il y a des commentaires. On trouve par exemple (en 11.7)
declare -i x # affiche les dix chiffres
for (( x=0 ; x<10 ; x++ ))
do
echo $x
done
et aussi des trucs comme (en 2.1.1)
$ x=coucou y=bonjour => la variable x contient la chaîne de caractères coucou
$ => la variable y contient la chaîne bonjour
Le contrat initial de favoriser une seule forme (en 1.1.3.) est rompu à la fin (en 14.10.) avec l’évocation de source
et .
Le contenu est disponible en deux versions : une web (cf. lien) découpée en plusieurs pages avec liens de navigation (précédant/sommaire/suivant), et un PDF téléchargeable.
La version PDF utilise une étrange coloration syntaxique sans fond tandis que la version web n’utilise qu’un fond uni et du texte en noir, uni pour les exemples avec des variations de graisse et inclinaison dans le texte d’explication.
Enfin, seule la version PDF comporte des exercices, ainsi que des références complémentaires
Malgré tout cela, c’est une bonne ressource complète en français qui est plus simple que le mythique ABS (listé parmi les références de l’auteur.)
NdM : cette dépêche a été soumise par l’auteur du cours, mais sous une forme tellement succincte qu’elle ne pouvait pas passer sous les fourches caudines de la modération qui a, cependant, trouvé le sujet intéressant. Gil Cot l’a quasiment entièrement récrite en l’enrichissant considérablement, notamment avec « le point de vue de la rédaction ». Il a mérité au passage les plus chaleureux remerciements de la modération.
# Suite de fibonacci en bash:
Posté par jahman . Évalué à 2. Dernière modification le 05 août 2022 à 15:58.
Est ce qu'a la fin du cours on est capable de comprendre les méchanismes internes de ce one-liner? ;)
[^] # Re: Suite de fibonacci en bash:
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Juste après avoir avoir fini le cours, pour un/une complet/complète débutant/débutante, j'ai un petit doute. Ceci dit, pour avoir entièrement parcouru le cours, oui il y a tous les éléments pour le comprendre ; juste qu'il faut quand même quelques temps de pratique à mon avis.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Suite de fibonacci en bash:
Posté par SChauveau . Évalué à 10. Dernière modification le 05 août 2022 à 20:30.
Amusant. Bien que pratiquant le Bash fréquemment, je dois avouer avoir dû consulter le man pour le comprendre.
SPOILER ALERT:
a
est donc un tableau contenant 4 éléments.a[0] --> 'a[a[n]=a[n-1]+a[n-2],n++/94]'
a[1] --> 2
a[2] --> 0
a[3] --> 1
Pour un tableau
X
, la syntaxe${X[@]:i}
permet d'obtenir les éléments à partir de l'indicei
soitX[i] X[i+1] ...
Ici,
i
correspond à l'expressionn=4,a
qui est alors évaluée en mode ARITHMETIQUE.Comme en C, l'opérateur
,
permet d'évaluer plusieurs expressions et retourne la valeur de la dernière. Ici, on a doncn=4
puis le résultat finala
.Or, en Bash, une référence simple à un tableau retourne son premier élément.
L'indice 'i' est donc équivalent à
i -->
n=4, a[a[n]=a[n-1]+a[n-2],n++/94]
Comme
n++/94
est équivalent àn=n+1, n/94
on a donca[0]
-->a[a[n]=a[n-1]+a[n-2],n++/94]
a[0]
-->a[a[n]=a[n-1]+a[n-2],n=n+1,n/94]
a[0]
-->a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
Et l'indice
i
est donc évalué commei -->
n=4, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
i -->
n=4, a[4]=a[3]+a[2], n=5, a[5/94]
i -->
n=4, a[4]=a[3]+a[2], n=5, a[0]
On remplace alors
a[0]
par sa valeur pour obteniri -->
n=4, a[4]=a[3]+a[2], n=5, a[n]=a[n-1]+a[n-2], n=n+1, a[n/94]
i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[6/94]
i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, a[0]
Le même processus récursif se poursuit jusqu'à ce que
n
soit égal à94
et donc quea[n/94]
deviennea[1]
.L'indice i est donc évalué comme
i -->
n=4, a[4]=a[3]+a[2], n=5, a[5]=a[4]+a[3], n=6, ... , a[93]=a[92]+a[91], n=94, a[1]
La valeur finale de l'indice
i
est donca[1]
= 2 et le résultat final${a[@]:i} = a[2] a[3] ... a[93]
, la suite de Fibonacci.[^] # Re: Suite de fibonacci en bash:
Posté par SChauveau . Évalué à 5.
Et une petite rectification:
n++/94
n'est pas équivalent àn=n+1, n/94
mais àn/94, n=n+1
[^] # Re: Suite de fibonacci en bash:
Posté par Benoît Sibaud (site web personnel) . Évalué à 3. Dernière modification le 06 août 2022 à 09:18.
Reste la question "pourquoi 94 ?"
(Un autre cas connu à étudier serait la "fork" bomb, détaillée sur https://fr.m.wikipedia.org/wiki/Fork_bomb )
[^] # Re: Suite de fibonacci en bash:
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
94 est juste la limite (génération ou nombre d'itération ou un truc de la sorte) qu'on s'est fixé : ici on calcule
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# BUT en 2 ans ??
Posté par matteli . Évalué à 3.
Juste sur ce point.
Un Bachelor se fait en 3 ans. On peut avoir un DUT au bout de 2 ans (délivrance intermédiaire).
Comment faites-vous à Rodez ?
[^] # Re: BUT en 2 ans ??
Posté par gnumdk (site web personnel) . Évalué à 3.
Le BUT dans les IUT, c'est 3 années.
[^] # Re: BUT en 2 ans ??
Posté par Ysabeau 🧶 (site web personnel, Mastodon) . Évalué à 3.
La source de l'info est le site de l'université de Toulouse dont il dépend :
https://www.ut-capitole.fr/accueil/universite/composantes/iut-de-rodez
Et la fiche sur le site de l'IUT n'est pas terriblement claire (pas pour moi en tout cas) :
https://www.iut-rodez.fr/fr/les-formations/but-informatique/but-informatique-presentation
Mais ça peut se corriger.
« Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.
[^] # Re: BUT en 2 ans ??
Posté par sjub . Évalué à 10.
La réforme du DUT et Licence Pro en BUT maintient effectivement la possibilité d'obtenir le DUT au bout de 2 ans, mais ce n'est pas pour autant que cela sera considéré comme le même DUT par tout le monde. Certaines écoles indiquent que comme les enseignements sont étalés sur 3 ans, le niveau DUT sera acquis à la fin du BUT et donc les étudiants seront acceptés dans les écoles en 1ère année du cycle ingénieur, donc 6 ans pour obtenir le titre : CPU vs CDEFI
Je n'enseigne plus cette année en IUT mais j'y ai passé environ 15 ans donc voici mon analyse de la réforme et mon ressenti.
Le niveau des étudiants devient plus hétérogène avec l'obligation d'accepter 50% de BAC STI alors que dans pas mal d'IUT on pouvait remplir avec 100% de BAC S car beaucoup d'étudiants de S qui aiment l'info préfèrent passer 2 ans à faire ça plutôt que de passer par des prépas, ou des licences avec beaucoup de maths, physique, etc.
Et maintenant on a des bons étudiants avec un BAC S, toutes les options maths + info qui se retrouvent face à des BAC STI de différents niveaux et c'est pas simple à gérer.
Pour l'instant il faut attendre de voir quelles sont les filières qui vont accepter les étudiants de BUT : les écoles, les L3 informatique, les masters ???
De mon point de vue, la réforme n'est pas là pour aider les étudiants, ni fournir des moyens de mieux les former.
Il faut aussi voir comment ça a été mené en plein COVID avec des infos contradictoires ou des interprétations différentes des textes, l'introduction de pleins de projets comme ça ça coûte moins cher en heures, un stage de 8 semaines non obligatoirement rémunéré en 2ème année, un stage plus long en 3ème année et on peut se demander comment les étudiants vont trouver autant de stages.
Toute cette réforme évidemment élaborée en lien étroit avec les équipes pédagogiques concernées sur le terrain… ou pas !
La prochaine étape sera peut être d'imposer des taux de réussite (le rectorat a cette possibilité apparemment) pour assurer que 80% des étudiants obtiennent un BAC+3 qui ne sera pas une licence.
Ou alors je n'ai pas très bien compris l'intérêt de la réforme…
De toute façon, les équipes pédagogiques vont tout faire pour ne pas lâcher les étudiants, donc ça va donner l'apparence que la réforme fonctionne, mais c'est très difficile sur le terrain, dans mon IUT on a par exemple abandonné la formation en Année Spéciale qui permettait à des étudiants ayant un BAC+2 non info ou une expérience professionnelle de suivre une formation intensive d'1 an pour obtenir le DUT et une double compétence ou se réorienter.
# Merci à Monsieur Sanchis
Posté par gnumdk (site web personnel) . Évalué à 10.
Et un grand merci à ce prof sans qui:
- j'aurai arrêté mon DUT à la première année
- qui m'a fait découvrir le logiciel libre avec un cours abordant le coté historique et philosophique du libre
- sans qui je ne serai pas aujourd'hui contributeur au projet GNOME
Et à l'époque, on avait des cours KSH sous HPUX :) (1999)
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3. Dernière modification le 06 août 2022 à 11:32.
Il y a quelques petits trucs du Korn qui n'ont pas été repris dans Bourne Again. Ksh est vraiment fascinent pour l'époque.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 3.
Pourquoi ?
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 5.
Bah si tu te remets dans l'époque, Jo a apporté beaucoup de choses qui faisaient défaut aux autres shells et permis de faire plus que csh en restant dans l'esprit Bourne. Beaucoup de choses qui semblent aller de soi aujourd'hui (rien que la complétion avec la touche de tabulation par exemple, mais aussi les tableaux), dans bash ou zsh, sont apparues avec ksh ; je m'excuse de trouver ça fascinant.
Encore aujourd'hui, il reste de petites choses sympas (qui comme je dis n'ont pas été reprises dans bash) Par exemple, en shell POSIX
…qu'il faut répéter à chaque modification de la valeur. Je laisse le bashisme qui va bien à titre d'exercice (je ne pratique pas assez pour me souvenir de la façon élégante et concise de le faire.) En kshisme c'est aussi marrant que
et si je change la valeur de ma variable ça continue à le faire tout seul.
Les tubes aussi c'est pas mal …dans certaines constructions intuitives.
Ainsi, en bash
Le pourquoi est expliqué dans le cours. En ksh
Ça fait longtemps que je ne fait que des scripts POSIX, mais en fouillant je pourrai te retrouver d'autres joyeusetés ksh.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 6.
C'était une question, je ne me suis jamais penché sur csh/ksh/tcsh et je comprends pour l'autocomplétion effectivement.
Depuis la version 4, tu peux soit utiliser la même méthode soit :
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Ah oui,
^
… D'ailleurs, je ne me souviens pas si je l'ai aperçu dans le cours (par contre me souviens bien que les formes*
/%
//
ont été mentionnées.) Si c'est le cas, ce sera un exemple de la critique de la dépêche indiquant qu'on ne trouve pas des choses spécifiques aux versions 4 et 5 (tout le cours devrait pouvoir se dérouler avec bash 2 je pense, mais bash 3 pour sûr)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 2.
Pourquoi devrait ? Il fait son cours comme il veut et décrit que c'est prévu pour bash 5.1. Et la dépêche dit "Bash 5 : une introduction"
Où est-ce qu'on trouve encore bash 2 et 3 ? Bash 3 sur les bsd qui fuient la GPLv3 pour le base system ? Ils n'ont pas switché sur dash ou zsh ?
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 1.
J'écrivais « devrait pouvoir » au sens de ce qui est garanti. Et mon propos est qu'on a bien la base (normal pour une introduction) mais rien qui soit spécifique aux dernières versions. En ce sens, le cours n'est pas prévu pour bash 5.1 mais juste que tout a été testé avec cette version. Je confirme donc, après lecture attentive du cours, qu'il ne faut pas avoir peur d'utiliser ce matériel si on n'a pas spécifiquement la version 5.1 (et c'est un plus/avantage pour un cours introductif.)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2. Dernière modification le 07 août 2022 à 12:55.
Attention que ce n'est pas exactement la même méthode : En mode POSIX (portable) on passe par une autre commande,
tr
, mais avec bash il y a des mécanismes d'expansion de variable qui font directement le boulot. L'approche de ksh n'est pas au niveau de la manipulation explicite de la variable (c'est ce que j'entendais par le fait qu'il faudra toujours refaire la manip, donc d'écrire par exemple{site^}
et pas juste{site}
… —je ne mets pas les dollars devant ça mathjax malgré les backticks) alors que ksh encode cela dans la déclaration même (basiquementtypeset
est équivalent àdeclare
mais c'est vrai que c'est moins propre que l'approche de bash car si on est puriste on remarque qu'on mélange traitement et typage en quelque sorte —cette contorsion se justifie par le fait qu'il y a un type lowercase au même titre que integer, et que ce type inclue/implique le traitement automatique à l'initialisation de ton objet si je peux me permettre cette analogie.)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 2.
Et cette approche fonctionne dans bash4. Tu peux utiliser typeset pour définir une variable lower case.
Je vois pas quand c'est une bonne idée, mais tu peux.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 4.
Possible que ça marche aussi et que ce soit signalé dans le manuel avancé
Comme je disais, bonne ou mauvaise idée dépend des goûts de chacun, mais c'est juste que les approches sont différentes. Le plus vieux a des « déclarations » étendues pour répondre à certains usages courants. Le plus jeune distingue les déclarations et les « traitements » et ça fait plus propre pour beaucoup de gens aujourd'hui. Juste deux approches différentes qui réflètent aussi des époques différentes.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 2.
Je sais pas sur quelle version tu as essayé sur 4.1 :
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Merci à Monsieur Sanchis
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Ah d'accord… Du 3.2 sur la machine où j'écris présentement
J'ai aussi du 3.x sur certains serveurs Solaris au taf (machines où il y a des scripts ksh qui ne passent dans dans bash mais que personne n'a jamais eu le temps de porter) ; et du 2.1 ou 2.2 sur le SCO d'un client
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: Merci à Monsieur Sanchis
Posté par barmic 🦦 . Évalué à 2. Dernière modification le 17 août 2022 à 08:25.
Comme je disais c'est arrivé avec la version 4.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
# x=coucou y=bonjour
Posté par harlock974 . Évalué à 5.
Ça fait des années que j'utilise bash, et rien qu'avec cette dépêche j’apprends qu'on peut déclarer des variables sur la même ligne sans les séparer par un point-virgule…
Il faut vraiment que je lise ce cours.
[^] # Re: x=coucou y=bonjour
Posté par Benoît Sibaud (site web personnel) . Évalué à 8. Dernière modification le 06 août 2022 à 14:04.
Je ne veux t'affoler mais ça fait des années que j'utilise un noyau Linux et j'en ignore une grande partie des fonctionnalités et du fonctionnement. Un peu comme la glibc, gcc, ssh, GIMP ou wireshark. Sans même parler de Linuxfr.org ;-).
[^] # Re: x=coucou y=bonjour
Posté par MicP . Évalué à 3.
Bonjour
J'utilise aussi cette méthode quand, entre autres, j'ai un doute au sujet d'une éventuelle erreur d'interprétation ou de traduction dans certains manuels, et dans ces cas là, je fais précéder la commande
man
de :LANG=C
Par exemple pour visualiser la version originale (non traduite) du manuel de l'interpréteur de commandes
bash
ou bien, pour visualiser une version non traduite du message d'erreur retourné par une ligne de commande :
# Lien
Posté par barmic 🦦 . Évalué à 2. Dernière modification le 06 août 2022 à 22:29.
Le lien dans « Aller plus loin » ne fonctionne pas chez moi. La redirection https → http ne semble pas autorisé par mon navigateur. Je ne sais pas si c'est une configuration chez moi ou si c'est classique.Après nouveau test ça fonctionne. Peut être que c'était juste un problème transitoire.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Lien
Posté par Donk . Évalué à 3.
J'ai aussi un problème de redirection quand je suis en navigation privée.
# t d m
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Je viens de me rendre compte qu'il n'y a pas de sommaire à la dépêche. À quoi est-ce du ?
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: t d m
Posté par Benoît Sibaud (site web personnel) . Évalué à 3.
Le sommaire est ajouté automatiquement si le contenu est assez long.
(et long signifie ici plus de 5000 caractères
https://github.com/linuxfrorg/html-pipeline-linuxfr/blob/linuxfr/lib/html/pipeline/linuxfr.rb#L6 )
[^] # Re: t d m
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
OK, merci. J'avais cru que ça y était à un moment pendant la rédaction, ce devait être un songe.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.