Bourne-Again shell
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Bash, acronyme de Bourne-again shell, est le shell du projet GNU. Son nom est un jeu de mots sur le nom du shell historique d'Unix, le Bourne shell : Bourne again / born again signifie " né de nouveau " ou encore " réincarné ". Basé sur ce dernier, il apporte de nombreuses améliorations, provenant notamment du Korn shell (Le Korn shell ou ksh est un shell Unix développé par David Korn au début des années 1980 (la première version est sortie en 1983). Il est compatible...) et du C shell. Bash est un logiciel libre (Un logiciel libre est un logiciel dont l'utilisation, l'étude, la modification, la duplication et la diffusion sont universellement autorisées sans contrepartie financière. Les droits correspondant à...) publié sous Licence publique générale (GPL). Il est l'interprète par défaut sur de nombreux Unix libres, notamment sur les systèmes GNU/Linux. C'est aussi le shell par défaut de Mac OS X (Mac OS X est une ligne de systèmes d’exploitation propriétaire développés et commercialisés par Apple, dont la version la plus récente (Mac OS X 10.5 dit 'Leopard' fin 2007)...) et il a été porté sous Windows (Windows est une gamme de systèmes d'exploitation produite par Microsoft, principalement destinées aux machines compatibles PC. C'est le remplaçant de MS-DOS. Depuis les...) par le projet (Un projet est un engagement irréversible de résultat incertain, non reproductible a priori à l’identique, nécessitant le concours et l’intégration d’une grande diversité de...) Cygwin (Cygwin est une collection de logiciels libres à l'origine développés par Cygnus Solutions permettant à différentes versions de Windows de Microsoft d'émuler un système Unix. Il vise principalement l'adaptation à Windows...).

Session de travail avec Bash
Session de travail avec Bash

Histoire

Son auteur original est Brian Fox de la Free Software Foundation, relayé plus tard par Chet Ramey. Le Bourne shell (Le Bourne shell ou sh, était le shell par défaut de la version 7 d'Unix, il remplaçait le Thompson shell dont le fichier exécutable avait le même nom : sh. Le Bourne...) original fut écrit par Steve Bourne.

Fonctionnement interactif

Bash utilise la bibliothèque readline ce qui lui permet, comme le C shell, de compléter automatiquement les noms de commandes et de fichiers lors d'une frappe sur la touche TAB, ce qui accélère considérablement le travail. Les touches UP et DOWN permettent de naviguer avec facilité dans l'historique des commandes.

Langage de commande (Commande : terme utilisé dans de nombreux domaines, généralement il désigne un ordre ou un souhait impératif.)

Le premier mot de la ligne est donc considéré par l'interprète comme un nom de commande. Mais il en existe de plusieurs sortes, avec différents types de priorité. Dans l'ordre décroissant de priorité:

  1. un alias : c'est un mot défini comme synonyme d'un autre (groupe de) mot(s). Dans ce cas, l'interprète commence par remplacer le mot par son équivalent.
  2. une commande interne (En France, ce nom désigne un médecin, un pharmacien ou un chirurgien-dentiste, à la fois en activité et en formation à l'hôpital ou en cabinet pendant une durée variable selon le "Diplôme d'études...) : c'est une commande qui a été définie dans l'interprète lui-même, elle ne fait pas l'objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être désigné par une...) d'un programme séparé. Par exemple, les commandes "cd" (change directory) ou "set" sont des commandes internes du shell.
  3. une commande externe, c'est-à-dire un programme (ou un fichier ( Un fichier est un endroit où sont rangées des fiches. Cela peut-être un meuble, une pièce, un bâtiment, une base de données informatique. Par exemple : ...) de commande, en général appelé script) stocké sur le disque (Le mot disque est employé, aussi bien en géométrie que dans la vie courante, pour désigner une forme ronde et régulière, à l'image d'un palet — discus en latin.) de la machine. Par exemple, /bin/ls est la commande qui permet de lister les fichiers contenus dans un répertoire donné.

Chaque commande respecte les contraintes suivantes :

  1. le premier mot de la ligne est interprété comme le nom de la commande, les autres mots en sont les paramètres ou options ;
  2. chaque mot est séparé par un ou plusieurs caractères de séparation (D'une manière générale, le mot séparation désigne une action consistant à séparer quelque chose ou son résultat. Plus particulièrement il est...). Par défaut, ces caractères sont l'espace et la tabulation (modifiable grâce à la variable (En mathématiques et en logique, une variable est représentée par un symbole. Elle est utilisée pour marquer un rôle dans une formule, un prédicat ou un algorithme. En statistiques, une variable...) IFS: Internal Field Separator) ;
  3. la fin de la commande est marquée, soit par un ";" (si l'on veut placer plusieurs commandes sur la même ligne), soit par un saut de ligne (En informatique, le saut de ligne (LF, line feed) est un caractère de contrôle indiquant qu'une ligne devrait être sautée. Son code ASCII est 10 (0A en hexadécimal). Le saut...).

$PATH

Dans le cas d'une commande externe, le shell doit retrouver le programme avant de pouvoir l'exécuter. Une recherche (La recherche scientifique désigne en premier lieu l’ensemble des actions entreprises en vue de produire et de développer les connaissances scientifiques. Par extension métonymique, la recherche...) exhaustive, pour chaque commande, dans tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) le système de fichiers prendrait beaucoup trop de temps (Le temps est un concept développé par l'être humain pour appréhender le changement dans le monde.) et rendrait le système inutilisable dans la pratique. Seul un petit ensemble (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une multitude qui peut être comprise comme un tout »,...) de répertoires est en fait consulté lors de la recherche du programme permettant l'exécution de la commande. Ces répertoires sont définis dans une variable d'environnement (L'environnement est tout ce qui nous entoure. C'est l'ensemble des éléments naturels et artificiels au sein duquel se déroule la vie humaine. Avec les enjeux écologiques actuels, le terme...) appelée "$PATH". Si la commande n'est pas trouvée dans l'un des répertoires listés dans le PATH, l'exécution se solde par un message (La théorie de l'information fut mise au point pour déterminer mathématiquement le taux d’information transmis dans la communication d’un message par un canal de communication,...) d'erreur du type "command not found".

Contrairement à ce qui se passe sous Windows, pour des raisons de sécurité, les shell UNIX (et donc bash) n'incluent pas implicitement le répertoire courant dans le PATH, mais il peut y être placé explicitement.

Session

La fermeture (Le terme fermeture renvoie à :) de session se fera par la commande exit ou un "Ctrl D" (la marque de fin de fichier sous UNIX : l'utilisateur ferme le flux (Le mot flux (du latin fluxus, écoulement) désigne en général un ensemble d'éléments (informations / données, énergie, matière, ...) évoluant dans un sens commun. Plus...) de lecture de l'interpréteur).

Syntaxe

Chaque commande est associée à

  • Une entrée standard (stdin)
  • Une sortie standard (stdout)
  • Une sortie d'erreur (stderr)

Éventuellement, des descripteurs de fichier supplémentaires peuvent être associés à une commande.

Les métacaractères du shell

Un métacaractère est un caractère qui possède une signification au-delà de sa signification littérale[1]. Quelques exemples au niveau des expressions rationnelles dans Bash :

  • "*" : correspond à n'importe quel caractère, répété 0, 1 ou plusieurs fois.
  • "?" : est équivalent à un caractère quelconque.

Et d'autres au niveau des commandes Bash :

  • "`" : interprète la chaîne de caractères (En informatique, une chaîne de caractères est une suite ordonnée de caractères. La chaîne de caractères est un type de donnée dans...) incluse entre deux de ces caractères comme une commande. Exemple : for file in `ls` ;
  • "\" : empêche l'interprétation spéciale d'un métacaractère ;
  • "'" : tous les caractères inclus entre deux de ces caractères sont interprétés comme simple texte.

Gestion de processus [2]

Commandes Opérations Explications
 
 A & 
 
Crée un nouveau processus lançant la commande A (indépendante de la console).
 
 A && B 
 
ET logique (La logique (du grec logikê, dérivé de logos (λόγος), terme inventé par Xénocrate signifiant à la fois raison, langage, et raisonnement) est dans une...) (&&) Exécute B, si A réussit.
 
 A || B 
 
OR (||) Exécute B uniquement si A échoue.
 
 A `B` 
 
paramètres dynamiques A utilise les résultats de l'éxécution de B
 
 A $(B) 
 

Gestion de flux

Il existe trois flux majeurs :

  1. l'entrée (ou " input ") standard (entrée 0) ;
  2. la sortie (ou " output ") standard (entrée 1) ;
  3. la sortie d'erreur standard (entrée 2)

Méthode d'utilisation :

Commandes Opérations Explications
 
 A > fichier 
 
sortie (>) Exécute la commande A et écrit les résultats dans fichier
 
 A 2> fichier 
 
sortie (2>) Exécute la commande A et écrit les erreurs dans fichier
 
 A > fichier 2>&1 
 
sortie (> et 2>&1) Exécute la commande A et écrit les résultats et les erreurs dans fichier
 
 A < fichier 
 
entrée (<) Exécute la commande A et propose le fichier comme des entrées de A.
 
 A | B 
 
sortie, entrée(|) Exécute A et envoie ses résultats comme entrée de B

Redirection de l'entrée et des 2 sorties

  • on utilise > pour faire la redirection de la sortie standard (stdout) d'une commande
  • 2> pour la redirection de la sortie 'des erreurs' (stderr)

d'une manière générale n> permet la redirection du nième descripteur de fichier (En informatique, un descripteur de fichier est une clé abstraite pour accéder à un fichier. On utilise généralement ce terme pour les systèmes d'exploitation POSIX. Dans la...)

  • &> pour rediriger en même temps la sortie standard et la sortie erreur :

Variables du shell

Les variables sont référencées en les faisant précéder par le signe $ : exemple echo $HOME

Quelques variables d'environnement : USER PID HOME PATH SHELL

Substitution de commandes

dans une ligne de commande, on remplace comme argument une commande par son résultat (au stdout) en l'entourant d'apostrophes inversées ` nom commande` ou encore en utilisant $() $(nom commande)

Expression rationnelle

Caractère d'échappement anti-slash ("\")

Anti-slash en fin de ligne

À la fin d'une ligne, un anti-slash indique que la commande continue à la ligne suivante. Cette fonction est particulièrement utile pour les grandes commandes afin de les rendre plus facilement lisibles.

Anti-slash pour former un des caractères spéciaux du C

Les chaînes ayant un format analogue à $'\n' sont interprétées d'une façon particulière par le bash. Elles sont transformées en conformité avec les règles du C ANSI. Exemple :

 
 echo $'\a' # Provoquera un bip sonore. 
 

Voici la liste :

Échappement
par antislash
Transformation par l'interpréteur (En informatique, un interprète (parfois appelé, à tort, « interpréteur » par mauvaise traduction de l'anglais) est un outil ayant pour tâche d'analyser, de traduire et d'exécuter un programme écrit...) bash
\a Bip sonore
\b Espacement arrière
\e Échappement
\f Saut de page (le nom anglais de ce caractère est form feed)[3]
\n Saut de ligne
\r Retour chariot (Un chariot est un plateau équipé de quatre roues, et sert au transport de charges. Par extension on inclut également ceux à trois ou cinq roues, parlant alors de chariots à trois ou cinq points d'appui. Un chariot est...)
\t Caractère de tabulation horizontale
\v Caractère de tabulation verticale (La verticale est une droite parallèle à la direction de la pesanteur, donnée notamment par le fil à plomb.)
\\ Anti-slash
\' Un apostrophe (le nom anglais de ce caractère est quote)
\nnn Le caractère 8-bits (Dans l'architecture des ordinateurs, les entiers 8-bits, des adresses de mémoire, ou d'autres unités de données sont ceux qui ont au moins 8 bits c'est à dire un...) dont la valeur en octal est nnn
\xHH Le caractère 8-bits dont la valeur en hexadécimal est HH
\cx Le caractère contrôle-X

Voir ASCII

Anti-slash avant un des meta-caractères du bash

Les meta-caractères, notamment "*" (étoile), sont interprétés par l'interpréteur bash (le plus souvent remplacement par d'éventuels fichiers), ce qui est gênant dans certains cas (commande find[4], sed, ...etc); exemple :

 
 cd /etc;find . -name r* 
 Le message d'erreur sera 
 Find: Les chemins doivent précéder l'expression 
 

Une des solutions est d'utiliser un anti-slash avant le caractère "*". Exemple :

 
 cd /etc;find . -name r\* 
 

Remarque

Une autre solution serait d'utiliser les guillemets. Exemple
 
 cd /etc;find . -name "r*" 
 

Éventuels scripts de démarrage et de déconnexion

Script exécuté lors de la connexion

  • Commun à tous les utilisateurs
    • /etc/profile
  • Spécifique à chaque utilisateur
    • .bash_profile
    • .bash_login
    • .profile

Scripts de déconnexion

  • .bash_logout

Script pour les shell interactifs autres que les scripts de connexion :

  • .bashrc
Page générée en 0.131 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique