Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:shells:bash-les-differents-caracteres-speciaux [22/10/2015 13:05] milou [Métacaractères et métacaractères !] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [01/04/2023 19:17] (Version actuelle) agp91 [Consoles et terminaux] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Bash : Vision d'ensemble ====== | ====== Bash : Vision d'ensemble ====== | ||
- | * Objet : Vue d'ensemble du shell Bash et présentation des différentes fonctionnalités. | + | * Objet : Début de la série de wiki visant à maîtriser bash par les caractère. |
* Niveau requis : {{tag>débutant avisé}} | * Niveau requis : {{tag>débutant avisé}} | ||
- | * Commentaires : FIXME | + | * Commentaires : Bash, ligne de commande et scripts |
- | * Suivi : | + | * Suivi : {{tag>en-chantier}} |
* Création par [[user>Hypathie]] 20/03/2014 | * Création par [[user>Hypathie]] 20/03/2014 | ||
* Testé par [[user>Hypathie]] en Avril 2014 | * Testé par [[user>Hypathie]] en Avril 2014 | ||
Ligne 11: | Ligne 11: | ||
**Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | **Nota :** Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli ! | ||
+ | <note important> | ||
+ | Page en court de réécriture | ||
+ | </note> | ||
+ | |||
+ | * **Vision d'ensemble** ;-) | ||
+ | * [[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | ||
+ | * [[atelier:chantier:bash:les-operateurs-sur-parametres|Les opérateurs de test sur paramètres]] | ||
+ | * [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs de test sur chaînes]] | ||
+ | * [[atelier:chantier:bash:les-operateurs-de-test-sur-fichiers|Les opérateurs de test sur fichiers]] | ||
+ | * [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Les opérateurs de comparaison numérique]] | ||
+ | * [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Les symboles dans les calculs]] | ||
+ | * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Bash : les tableaux]] | ||
+ | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Les caractères de transformation de parametres]] | ||
+ | * [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : Variables, globs étendus, ERb, ERe]] | ||
===== Introduction ===== | ===== Introduction ===== | ||
- | > Voici une étude du Bash qui prend comme entrée les différents caractères. | + | Cette suite de pages wiki se propose, de nous guider dans l'apprentissage de l'interpréteur de commande **bash** (Bourn Again SHell).\\ |
- | > Plus précisément, j'ai suivi la page man bash et j'ai tenté d'en expliquer et d'en illustrer le détail par des exemples. | + | Nous l'explorons à travers les caractères et opérateurs, qu'il met à notre disposition. Ils permettent de structurer les commandes pour manipuler nos systèmes GNU/Linux. |
- | > Cette étude est développée sur huit wiki (voir la liste ci-dessous), elle se veut à la fois progressive et synthétique. | + | |
- | > Si vous êtes débutant, suivez la progression, si vous cherchez un simple rappel, consultez les tableaux récapitulatifs de chacune des parties. | + | |
- | > [[user>Hypathie]] | + | |
- | * ;-) | + | Accessible à un niveau débutant,\\ |
- | * [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Détail et caractères]] | + | Cette suite de document à pour but, de dépasser ce stade, et de nous mener à un niveau intermédiaire (avisé). |
- | * [[doc:programmation:shells:la-page-man-bash-ii-les-operateurs-lexicographiques|Les opérateurs lexicographiques]] | + | |
- | * [[doc:programmation:shells:page-man-bash-iii-les-operateurs-de-comparaison-numerique|Opérateurs de comparaison numérique]] | + | |
- | * [[doc:programmation:shells:page-man-bash-iv-symboles-dans-les-calculs-mathematiques|Symboles dans les calculs]] | + | |
- | * [[doc:programmation:shells:page-man-bash-v-les-tableaux|Les tableaux]] | + | |
- | * [[doc:programmation:shells:man-bash-vi-les-caracteres-de-transformation-de-parametres|Caractères de transformation de paramètres]] | + | |
- | * [[doc:programmation:shells:bash-vii-globs-etendus-regex|Bash : Variables, globs étendus, ERb, ERe]] | + | |
- | **Dans ce tuto** : | + | Plusieurs voies d'approches, peuvent apporter compléments et meilleur compréhension.\\ |
- | * définitions de //shell bash// et liens internes spécifiques au sujets évoqués ; | + | Ainsi nous pouvons aussi lire, les autres pages du wiki que propose DF : |
- | * explication sur l’ambiguïté du terme métacaractère. | + | |
- | * définitions de termes associés au shell et liens internes spécifiques au sujets évoqués | + | * [[https://debian-facile.org/doc:programmation:shell:shell|Le shell pour tous]] |
+ | * [[https://debian-facile.org/doc:programmation:bash|shell bash]] | ||
+ | |||
+ | C'est pages ne sont pas redondantes. Elles sont complémentaires. | ||
+ | |||
+ | |||
+ | Il est évident qu'un tel apprentissage, ne peut se faire sans quelques notions de bases informatiques. Présentées plus bas, dans la suite de cette page.\\ | ||
+ | Ainsi, que sans, la terminologie que bash nous impose. Indispensables pour la compréhension de sa syntaxe et de sa grammaire. | ||
+ | |||
+ | |||
+ | Les terminologies de bash, peuvent différer d'autres langages.\\ | ||
+ | Ce n'est pas pour se démarquer, que les concepteurs et documentalistes ont choisi d'autres termes ou d'autres sens à des termes plus usuels.\\ | ||
+ | Mais pour différencier correctement les différents éléments, afin de limiter les confusions.\\ | ||
+ | Ainsi nous pouvons dire que bash à du caractères ;). | ||
+ | |||
+ | Caractères,\\ | ||
+ | Par ce que bash utilise dans sa syntaxe, beaucoup de caractère et peut de mots (nommés mots réservés) pour appeler ses fonctionnalités.\\ | ||
+ | Quoi que, comme nous le verrons plus loin, un simple caractère peut être un mot. | ||
**Yep ! C'est parti !** 8-) | **Yep ! C'est parti !** 8-) | ||
- | ===== Shell BASH ===== | + | ===== Le shell ===== |
- | Le //shell// (« coquille » en anglais) est également appelé //interpréteur de commandes//. | + | Un **shell**, nommé aussi **interpréteur de commande**, est un logiciel en espace utilisateur qui permet d'ordonner des actions au système d'exploitation.\\ |
- | >C'est une couche logicielle qui fournit une l'interface utilisateur à système | + | De manière **interactif**, le shell permet à l'utilisateur de saisir, une ligne de commande au clavier, qui après interprétation, est exécutée.\\ |
- | >d'exploitation. | + | Lorsque le shell exécute une commande, sans précision, ni action supplémentaire, le shell attend la fin de l'exécution de la commande avant de redonner la main à l'utilisateur. |
- | >Il correspond à la couche la plus externe de ce dernier. | + | |
- | >Il se présente sous la forme d'une interface en ligne de commande accessible | + | |
- | >depuis la console ou un terminal. | + | |
- | >L'utilisateur lance des commandes sous forme d'une entrée texte exécutée ensuite par le shell. | + | |
- | <note tip>Le shell bash est l'un des shell utilisé sous gnu/linux. | + | Un shell est capable d'exécuter par lot, un ensemble de commande. La main est alors rendu à l’utilisateur, après l'exécution de la dernière commande du lot. Un lot de commande peut être écrit dans un fichier que nous nommons **script**. |
- | Pour un historique et la liste des shell les plus utilisés, voir : | + | |
- | * http://fr.wikipedia.org/wiki/Shell_Unix#Historique_des_shell_Unix | + | |
- | * [[doc:programmation:shell:shell#introduction|le shell pour tous:introduction]] | + | |
- | Quand on installe Debian Stable, le shell utilisateur par défaut est le shell Bash((alors que l'interpréteur de commande par défaut pour les applications est dash)). | + | Un shell, peut de manière **non-interactif** exécuter un script. Lorsque toutes les commandes contenues dans le script sont exécutées, le shell se termine, sans donner la main à l'utilisateur. |
+ | |||
+ | <note> | ||
+ | Si un script est exécuté de manière non-interactif par un shell. Et que le script comporte des commandes qui attendent une interaction avec l'utilisateur. Ce n’est pas le shell qui n'est pas non-interactif, mais le script lui même. | ||
</note> | </note> | ||
+ | Un shell dispose d'un langage de programmation, offrant la gestion de variable (déclaration, affectation, modification et suppression). L'écriture de boucle répétitive, de structure de choix, et de structure d'exécution conditionnelle. | ||
+ | |||
+ | Que le shell soit exécuté de manière interactif ou pas, il permet : | ||
+ | |||
+ | * D’accéder aux **système de fichier**. ((Bonne maxime à retenir : **Tout est fichier**.)) | ||
+ | * De fournir un environnement de travail, constitué de donnée. Mémorisée, sous la forme d'un couple nom/valeur, nommé variable. L'ensemble de ces variables sont nommées **variables de l'interpréteur**. S'ajoutent les __paramètres positionnels__ (ou __variables spéciales__ en csh) et autres __paramètres spéciaux__. | ||
+ | * De fournir un environnement, nommé **environnement**, constitué d'une sélection de variable, parmi les __variables de l'interpréteur__. L'**environnement** est un composant de l'__environnent d'exécution__. | ||
+ | * De fournir un **environnement d'exécution**, qui rassemble les informations nommées __données d'un processus__, indispensables au fonctionnement des processus. L'**environnement d’exécution** est transmis aux **processus fils**((Un **processus fils** est un processus créer par un autre processus, alors nommé **processus parent**.)) créés par le shell. | ||
+ | * D'exécuter des programmes dans des environnements, que nous nommons **processus**. Chaque programme dispose de son propre **processus**. Le shell, ne peut créer que des **processus fils**, nommés aussi **sous-shell** (**subshell**). | ||
+ | * De **suspendre**, **reprendre** ou **terminer** (tuer) l'exécution d'un processus en lui **envoyant un signal**. | ||
+ | * De **rediriger** : | ||
+ | * L'**entrée standard** depuis le clavier, la __sortie standard__ ou un fichier. | ||
+ | * Les **sorties standards**((Par défaut, les sorties standards sont deux : la **sortie standard** et la **sortie d'erreur standard**.)) vers l'écran ou des fichiers. | ||
+ | * De réaliser une **canalisation** (**pipeline**) entre deux processus. Les __sorties standards__ d'un processus sont connectées avec l'__entrée standard__ d'un autre processus. Quand le premier processus n'envoie rien vers ses __sorties standards__, l'exécution du second processus est suspendu. | ||
+ | * De remplacer le programme exécuté dans un processus par un autre programme. | ||
+ | * La **gestion des tâches**, en passant un processus en **arrière plan**, ou de le remettre au **premier plan**. | ||
+ | * De récupérer l'état final d'une commande, nommé **code de retour**. | ||
+ | * De regrouper des commandes, nommé **lot de commande** ou **suite de commande**. | ||
+ | |||
+ | Certains shells sont dit restreint. Ils restreignent pour des raisons de sécurité et d'optimisation, certaines fonctionnalités. | ||
+ | |||
+ | Exécuté de manière interactif, un shell offre des fonctionnalités supplémentaires : | ||
+ | |||
+ | * Il permet d'interpréter une ligne saisie directement au clavier. | ||
+ | * D'afficher sur l'écran, si elles ne sont par redirigées, les __sorties standards__ des commandes exécutées. | ||
+ | * De redonner la main à l'utilisateur, après l’exécution au premier plan, d'une commande ou d'un lot de commande. | ||
+ | * Il offre un environnement de travail à l'utilisateur : | ||
+ | * Un **prompt** (ou invite) est affiché lorsque le shell rend la main à l'utilisateur. | ||
+ | * Un outil d'édition qui permet de naviguer dans la ligne en court de saisie. | ||
+ | * Certains shells dispose : | ||
+ | * D'un **historique** des commandes déjà exécutées. Ainsi une commande déjà utilisée peut-être rappelée sur la ligne en court de saisie. | ||
+ | * D'une **complétion** des commandes, afin de faciliter la saisie des commandes. | ||
+ | |||
+ | Il existe de nombreux shells qui ont été développés au fil du temps.\\ | ||
+ | **Bash** est l'un des shells disponibles, le plus rependu, installé par défaut sur de nombreux systèmes, dont Debian GNU/Linux.\\ | ||
+ | Le Bourn-again shell (bash) est une implémentation libre du Bourn shell (l'un des premiers shell UNIX).\\ | ||
+ | Il a été développé par la **free software fondation**, pour le projet **GNU**. afin d'avoir un shell libre pour les UNIX libre. | ||
+ | |||
+ | __**Voir aussi :**__ | ||
+ | |||
+ | * [[https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#What-is-a-shell_003f|(gnu)(en) Bash Reference Manual : What is a shell ?]] | ||
+ | * Historique des shells Unix et GNU/Linux | ||
+ | * [[https://fr.wikipedia.org/wiki/Shell_Unix#Historique_des_shells_Unix|(fr.wikipedia) Shell Unix : Historique des shell Unix]] | ||
+ | * [[https://developer.ibm.com/tutorials/l-linux-shells/|(developer.ibm)(en) Evolution of shells in Linux]] | ||
+ | * Liste des shells | ||
+ | * [[https://fr.wikipedia.org/wiki/Shell_Unix#Shells|(fr.wikipedia) Shell Unix : shell]] | ||
+ | * [[https://packages.debian.org/stable/shells/|(packages.debian)Paquets logiciels dans « bullseye », Sous-section shells]] | ||
+ | |||
+ | ===== Consoles et terminaux ===== | ||
+ | |||
+ | Un shell interactif utilise une interface de ligne de commande (CLI : Commande Line Interface), aussi nommée interface en mode texte. | ||
+ | |||
+ | Pour différencier les différents types de CLI qui sont mises à notre disposition, nous utilisons communément deux termes : | ||
+ | |||
+ | * **La console** qui désigne, les interfaces que nous obtenons par la combinaison des touche ''Ctrl''+''Alt''+''F...'' | ||
+ | * **Le terminal** pour désigner, dans un environnent graphique, la fenêtre où nous obtenons une interface en mode texte. | ||
+ | |||
+ | <note> | ||
+ | Cela est simple et précis.\\ | ||
+ | Mais lorsque nous souhaitons aller plus loin, c'est finalement réducteur et porte à confusion.\\ | ||
+ | \\ | ||
+ | Pour retrouver les définitions, voir : [[atelier:chantier:terminaux-et-consoles-explications|Terminaux et consoles, explications]]. | ||
+ | </note> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | __**Sur un système non graphique**__, nous disposons uniquement d'interface en mode texte. | ||
+ | |||
+ | Sur un système Debian GNU/Linux moderne, 6 consoles sont disponibles. | ||
+ | |||
+ | Elles sont accessibles par l'usage des touches ''Ctrl''+''Alt''+''F1'' à ''F6''. | ||
+ | |||
+ | Leur usage est sanctionné par la saisi au clavier d'**un login** (couple nom de l'utilisateur + mot de passe). | ||
+ | |||
+ | <code> | ||
+ | Debian GNU/Linux 11 deb11pc | ||
+ | |||
+ | deb11pc login:_ | ||
+ | </code> | ||
+ | |||
+ | <note> | ||
+ | Lors de la saisie du mot de passe, aucun caractère n'est affiché.\\ | ||
+ | -> Ainsi personne ne peut lire le mot de passe durant sa saisie. | ||
+ | </note> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | __**Sur un système graphique**__, lorsque qu'il est démarré,\\ | ||
+ | Nous nous trouvons directement sur une 7em console (pour les système Debian GNU/Linux moderne). | ||
+ | |||
+ | Un login graphique nommé **gestionnaire de session graphique** ou **gestionnaire d'affichage** (**X display manager**) est affiché. | ||
+ | |||
+ | Pour continuer, nous devons renseigner notre nom d'utilisateur, puis notre mot de passe.\\ | ||
+ | Une fois connecté, le bureau est affiché à l'écran. | ||
+ | |||
+ | Pour disposer d'une interface en mode texte (et accéder à un shell interactif), nous devons exécuter une application nommée un **terminal fenêtre** ou **émulateur de terminal pour X**, plus communément **terminal**. | ||
+ | |||
+ | Le shell est directement disponible, aucun login n'est demandé. Par défaut, nous sommes connectés avec notre nom d'utilisateur. | ||
+ | <note> | ||
+ | Nous pouvons, quand nous le souhaitons, changer d’utilisateur avec la commande **su**. | ||
+ | </note> | ||
+ | <note> | ||
+ | Quand nous naviguons entre les différentes consoles, pour revenir sur l'interface graphique,\\ | ||
+ | La combinaison ''Ctrl''+''Alt''+''F7'' (ou la commande **chvt 7**) doit être utilisée. | ||
+ | </note> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | __**Voir aussi** :__ | ||
+ | |||
+ | * [[https://debian-facile.org/doc:systeme:console|console]] | ||
+ | * [[https://debian-facile.org/doc:systeme:terminal|terminal]] | ||
+ | |||
+ | ===== Shell BASH ===== | ||
==== Connaître votre shell utilisateur ==== | ==== Connaître votre shell utilisateur ==== | ||
Ligne 653: | Ligne 785: | ||
Un **script** est la rédaction dans un fichier texte d'un ensemble de //commandes// et d'expressions régulières (caractères utilisés symboliquement) orientant les instructions données aux commandes.\\ | Un **script** est la rédaction dans un fichier texte d'un ensemble de //commandes// et d'expressions régulières (caractères utilisés symboliquement) orientant les instructions données aux commandes.\\ | ||
- | * **Pour une initiation au script : [[atelier:chantier:debuter-avec-les-scripts-shell-bash]]** | + | * **Pour une initiation au script : [[doc:programmation:shells:debuter-avec-les-scripts-shell-bash]]** |
* **sur "if", "les boucles", etc. : [[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]]** | * **sur "if", "les boucles", etc. : [[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]]** | ||
* **considérations avancées : [[doc:programmation:shell:scripts|Rédaction de scripts Shell]]** | * **considérations avancées : [[doc:programmation:shell:scripts|Rédaction de scripts Shell]]** | ||
Ligne 679: | Ligne 811: | ||
===== la suite c'est ICI : ===== | ===== la suite c'est ICI : ===== | ||
- | [[docs:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]] | + | [[doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux|Bash : Détail et caractères]] |