Ce billet fait office d'aide mémoire pour les bases de la console Linux. Ces petites bases vous permettront de créer des scripts plus puissants et plus efficaces. Elles ne sont pas indispensables, juste nécessaires ;-)
Nous allons découvrir tout ceci :

Les opérateurs :

Ils permettent d'exécuter des commandes à la suite selon ce qui s'est passé à la commande précédente.

  • Le "commande1 && commande2" : il regarde le code erreur de la commande1, si celle-ci s'est bien passée (code retour=0) alors on exécute la commande2 sinon on ne fait pas la commande2
  • Le "commande1 || commande2" : Comme son collègue, il regarde le code erreur de la commande1, mais cette fois-ci, il ne lance la commande2 que si la commande1 a échouée (code retour != 0)
  • Le "commande1 ; commande2" : Celui là est spécial, il ne regarde pas ce qui s'est passé avant. Il exécute bêtement les commandes1 puis la commande2.

Les trois flux standards :

  • Le flux 0 : Il est aussi appelé stdin. Il s'agit du flux d'entrée. Une redirection du flux d'entrée dans une commande permet des fois de changer le comportement de la commande.

Exemple avec grep "te" <test qui cherche le mot "te" dans le fichier test placé sur l'entrée (stdin) de grep

  • Le flux 1 : il est aussi appelé stdout. Il s'agit du flux standard de sortie. Tout ce qui est affiché sur l'écran est par défaut envoyé sur stdout. Cependant, les messages d'erreurs ne sont (normalement) pas envoyé sur ce flux.

Exemple : cat coucou > coucoubis (qui nous fait une copie de fichier !)

  • Le flux 2 : Il s'agit de stderr. C'est le flux d'erreur. Toutes les erreurs de retour au sein des programmes doivent être envoyé sur ce flux. Il est extrêmement pratique !

Exemple : make 2>erreur.log. Cet exemple permet de récupérer toutes les erreurs lors de la compilation et de les mettre dans un fichier de log.

Les tubes

Cette technique est relativement simple et puissante. Elle permet de rediriger le flux d'un programme vers un autre. On peut donc utiliser le résultat d'une commande en entrée dans la commande suivante. Petit exemple : ps aux | grep apache2 permet d'envoyer dans la commande grep les processus courants et de rechercher (grep) la ligne où apache2 apparait. Pratique pour récupérer rapidement un PID (Process ID)

Raccourcis

  • Le !! permet de voir la dernière commande et de la ré-exécuter.
  • Le !24 permet de voir la 24ème commande de l'historique (voir la commande history) et de la ré-exécuter.

Variable shell

Certaines variables contiennent des informations sur votre environnement, il peut être pratique, voire nécessaire de les récupérer

  • echo $? : permet de voir le code retour de la dernière commande exécutée. (rappel : 0 -> ok, différent de 0 -> erreur)
  • echo $$ : donne le PID du shell courant
  • echo $! : très intéressant, donne le PID du dernier travail lancé en arrière plan
  • echo $HOME : renvoi le chemin du répertoire personnel de l'utilisateur
  • echo $PATH : liste des chemins possibles des commandes exécutables
  • echo $PS1 : affiche l'invite principale du shell
  • echo $PWD : renvoi le chemin du répertoire courant
  • echo $RANDOM : donne un nombre entier aléatoire compris entre 0 et 32767

Plus de complément sur http://www.epons.org/shell-bash-variables.php

Exécuter un fichier

La manipulation est aisée, mais encore faut-il la connaitre (ou s'en rappeler ;-) )

  • Ajoutez-vous les droits x sur le fichier (les droits d'exécution), via chmod u+x (d'autres commandes existent)
  • Lancer le programme soit par "./monprogrammeaexecuter" (sans les quotes) , soit si vous avez rajouté le chemin du dossier contenant le programme, directement "monprogrammeaexecuter" sans le . et les quotes