Bash

Quelques infos sur l’utilisation de la ligne de commande et la programmation Bash.

Ressources

Advanced Bash Scripting

Redirection des sorties

Tout programme possède deux sorties :

  • pour les messages standards : sortie standard
  • pour les messages d’erreurs : sortie d’erreur

Par exemple en C++ il est possible d’envoyer des messages vers ces sorties respectivement à l’aide des flux cout et cerr :

#include 
using namespace std;

int main() {

  cout << "Message standard" << endl;
  cerr << "Message d'erreur" << endl;

  return 0;

}

Par défaut ces sorties sont affichées à l'écran mais il est possible de les rediriger vers un fichier en plaçant un des symboles suivants ainsi qu'un nom de fichier à la suite de la commande :

  • > : pour la sortie standard
  • 2> : pour la sortie d'erreur
  • &> : pour rediriger les 2 sorties vers un même fichier

A l'utilisation cela nous donne par exemple :

echo "Hello!" > hello.txt
  # Le fichier hello.txt contient le texte "Hello!"

La première commande envoie le texte "Hello!" vers la sortie standard qui est redirigée dans le fichier nommé hello.txt.
Cette redirection implique évidemment que le texte n'est plus affiché à l'écran.
Si le fichier hello.txt n'existe pas, celui-ci est automatiquement créé, sinon, son contenu est écrasé et remplacé par le texte "Hello!".
Il est également possible de ne pas écraser le contenu du fichier existant en doublant le symbole >, la sortie est alors ajoutée à la fin du fichier :

echo "Hello!" >> hello.txt
  # Le texte "Hello!" est ajouté à la fin du fichier hello.txt

Quelques exemples d'utilisation dans le cas du fichier C++ ci-dessus générant le programme testredir :

testredir > out
  # affiche "Message d'erreur" dans le terminal
  # insère "Message standard" dans le fichier out

testdir > out 2> out.err
  # insère "Message standard" dans le fichier out
  # insère "Message d'erreur" dans le fichier out.err

testdir &> out
  # insère "Message standard" et "Message d'erreur"
  # dans le fichier out

La redirection peut ainsi servir à filtrer des sorties volumineuses (compilation de gros projets), à garder une trace d'une sortie, à créer des fichiers de logs, à supprimer l'affichage des sorties, ...
Voici quelques exemples simples :

cat file > file2
  # copie du contenu du fichier file dans le fichier file2,
  # équivalent à la commande cp file file2

echo "Hello!" > /dev/null
  # suppression de l'affichage du texte "Hello!"

Création de scripts Bash

Un script Bash est un simple fichier de texte dans lequel on insère ses commandes et que l'on exécute ensuite à l'aide de la commande bash appelée également l'interpréteur.
Ainsi pour créer un script qui affiche "Hello!" il suffit de créer un fichier appelé par exemple hello.sh et d'y insérer la commande suivante :

echo "Hello!"

Pour exécuter ce script il convient ensuite d'utiliser la commande bash de la manière suivante :

bash hello.sh

Je vous laisse deviner le résultat !
Une manière plus pratique d'exécuter un script est de le rendre exécutable ce qui permet de le lancer comme n'importe quel programme sans avoir à appeler explicitement l'interpréteur bash.
Étant donné qu'il existe différent langages de scripts (bash, perl, ...) il convient de spécifier le bon interpréteur directement dans le script, on obtient alors le script hello.sh suivant :

#!/bin/bash

echo "Hello!"

Pour que ce fichier soit exécutable on utilise la commande chmod suivante :

chmod u+x hello.sh

Cette commande peut se traduire par "change utilisateur+droit d'exécution au fichier hello.sh".
Le script se lance alors directement de la manière suivante :

./hello.sh