Le programme Bash

De Wiki info-lab.fr
Aller à : Navigation, rechercher

Sommaire

Présentation

Bourne Again Shell (BASh) est le shell du projet Gnu, amélioration du Bourne Shell, du Korn Shell et du C-Shell.
Bash est le shell par défaut de nombreuses distributions *NIX sauf que : Un compte rescue (single-user) est souvent démarré avec un shell de type sh, et le lancement des Debian et Ubuntu modernes nécessitant l'exécution de très nombreux scripts est confié à DASH plus léger et rapide que Bash.

Fonctionnement

Comme tout interpréteur, bash met à disposition un certain nombre de commandes permettant d'agir sur le système, permet le regroupement de ces commandes dans un fichier unique (script), vérifie toutes les commandes avant de les envoyer et renvoie éventuellement un message d'erreur (voire même une suggestion pour corriger l'erreur), au final interprête (traduit dans un langage adapté au système) la ligne de commande valide et l'envoie au système pour exécution.
Si BASH est le shell par défaut d'un utilisateur, celui ci se lance automatiquement en proposant une invite de commande (prompt). Un shell est lancé en cas de connexion à une session distante (telnet, rsh, SSh,...), et plusieurs sont automatiquement lancés en cas de session locale (en général entre 6 et 8, dont parfois 1 shell graphique, la GUI). Ces shells sont appelés shells de connexion (login shells).
Lancer un programme tel que xterm, terminator ... permet d'accéder à bash sans les propriétés d'un shell de connexion. On parle alors de "shell interactif", qui fait appel à des fichiers de configuration différents des "shells de connexion".
Un shell de connexion est identifié comme TTY, un shell interactif est identifié comme PTS.

Lancement des différents Shells

Pour tout shell bash lancé à la connexion un certain nombre de scripts sont exécutés :

/etc/profile           (commun à tous les utilisateurs)
~/.bash_profile        (propre à l'utilisateur)
~/.bash_login          (propre à l'utilisateur)
~/.profile             (propre à l'utilisateur)

Le script suivant est interprété à la déconnexion :

~/.bash_logout         (propre à l'utilisateur)

Pour tout shell lancé non lancé à la connexion le script suivant est exécuté :

~/.bashrc              (propre à l'utilisateur)

Le fichier .bashrc

Editer (vim) le fichier .bashrc permet de modifier un shell, de le personnaliser. De base ce fichier contient déjà nombre d'instructions qui modifient Bash. Voici la structure de ce fichier :

  • Une indication qui précise que .bashrc n'est lu par Bash que si le shell n'est pas un shell de connexion.
  • Une instruction qui demande aux shells de connexion de ne pas lire la suite du fichier.
  • Une section concernant l'historique : définit le comportement du fichier .bash_history
    • HISTCONTROL=ignoredups indique de ne pas y inscrire les commandes déjà présentes (suppression des doublons).
    • HISTCONTROL=ignorespace indique de ne pas y inscrire les commandes commençant par un espace.
    • HISTCONTROL=ignoreboth regroupe les mentions dups et space
    • HISTTIMEFORMAT permet d'ajouter un horodatage devant chaque commande.
    • HISTFILESIZE définit le nombre maximum de lignes dans le fichier (500 par défaut).
    • HISTIGNORE permet d'exclure une liste de commandes de l'historique. Par exemple :
export HISTIGNORE="cd:ls:exit:pwd"
  • La section suivante définit le comportement de Bash dans les dimensions de la fenêtre après chaque commande, pour en adapter l'affichage.
  • Une ligne améliore le retour de la commande less sur les fichiers binaires (less ne sait afficher que les fichiers textes) en invoquant automatiquement lesspipe.
  • La section suivante définit le répertoire racine accessible à Bash (par défaut /).
  • Puis un petit script à décommenter (#) pour avoir le prompt coloré.
  • Quelles informations doivent être affichées par le prompt.
  • La définition d'un alias de la commande ls qui colorise le résultat.
  • La possibilité d'ajouter ses propres alias avec ceux déjà présents (ls -l, ls -A ...)
  • L'activation de la fonctionnalité d'autocomplétion pour Bash.

Le fichier .bash_history

Enregistrement des 500 (par défaut) dernières commandes soumises à Bash, une par ligne et numérotées. Le fichier .bashrc définit quelles commandes sont inscrites et comment. Voici quelques utilisations de bash_history.
Afficher le fichier :

$ history | less        
$ less ~/.bash_history        (variante)

Pour rappeler et soumettre directement à Bash la dernière commande commençant par SSh (en étant sûr de son fait) :

$ !ssh
$ ssh -v login@serveur:1322
$ !logo   (de grande chances que ce soit logout)

Pour rappeler la 44ème commande du fichier.

$ !44   

Pour rappeler la dernière commande :

$ !!   

Pour exécuter une commande composée d'un texte concaténé avec la précédente commande, utiliser !! à la suite du texte à ajouter (bien pratique quand on a oublié de lancer une commande avec sudo par exemple).

$ mount -t vfat /dev/sdc1 /media/scandisk2Go
  mount : seul le superutilisateur peut exécuter cette commande
$ sudo !!
          

Pour rechercher une commande, utiliser la combinaison de touches CTRL+R pour appeler le "reverse incremental history search mode". Ecrire une chaîne de caractères va alors afficher la liste des commandes contenant cette chaîne. Une fois la commande localisée, la confirmer en utilisant la touche ENTREE. CTRL+J ou la touche ECHAP permettent de soumettre d'autres caractères, et CTRL+G ou CTRL+C pour sortir de ce mode recherche.
Une variante consiste à lancer :

$ history | grep -i "777"
 442 chmod -R 777 repertoire/            
 803 history | grep -i "777"

Caractéristiques de BASH

En plus de la gestion de l'historique des commandes et de recherche dans cet historique, et de la personnalisation de son comportement au moyen de ses fichiers de configuration, BASH propose aussi :

  • Localisation automatique des commandes (grâce à la variable PATH)
  • Vérification de la syntaxe (Bash n'accepte pas de syntaxe fausse). En général en cas d'erreur de syntaxe, Bash génère un message d'erreur et peut ajouter une aide à l'utilisateur.
  • Complétion des commandes au moyen de la touche TABULATION.
  • Création d'ALIAS pour simplifier la saisie des commandes avec arguments qui sont souvent utilisées.
  • Redirection de flux, pour modifier le cheminement "normal" du flux : On peut modifier l'entrée standard <, la sortie standard > ou >> et aussi transformer la sortie d'une commande en entrée de la commande suivante (PIPE) |.

Débogage

bash -x monScript.sh

-x provoque un débogage ligne par ligne du script ; le résultat normal du script est toujours affiché mais bash affiche en plus le résultat de son débogage au moyen de lignes commençant par le signe + .

Outils personnels
Espaces de noms

Variantes
Actions
Navigation
Outils