====================== Les scripts, et bash ====================== Les scripts permettent de programmer dans le langage du shell, en utilisant, entre autres, les commandes natives de Linux. Qu'est-ce que le shell ? ======================== Comme nous l'avons vu au début de ce cours, le shell, ou encore "invite de commande" est un programme qui vous permet d'interagir avec le système en ligne de commande. Il existe plusieurs shells : * sh : Bourne Shell. L'ancêtre de tous les shells. * bash : Bourne Again Shell. Une amélioration du Bourne Shell, disponible par défaut sous Linux et Mac OS X. * tcsh : Tenex C Shell. Amélioration du C Shell. * zsh : Z Shell. Shell assez récent reprenant les meilleures idées de bash, ksh et tcsh. * fish... et bien d'autres. Attention : les scripts, leur structuration et leur expressivité dépendent du shell que vous utilisez ! Comment savoir sur quel shell je me trouve ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Il suffit d'utiliser la commande ``echo $0``. Essayez les commandes suivantes : .. code-block:: bash echo $0 /bin/sh Une fois les commandes effectuées, essayez d'utiliser vos raccourcis préférés (Ctrl+R, Tab, flèches directionnelles). Que se passe-t-il ? Comment revenir à votre shell préféré ? À propos de bash ================ Il faut voir **bash** comme un langage de programmation comme un autre... et plutôt capricieux. Attention aux espaces, aux points virgules, aux guillements et aux variables qui se déclarent sans le ``$`` et qui s'utilisent avec. Vous trouverez dans la suite un rapide descriptif de ce qu'il est possible de faire en **bash**, mais n'hésitez pas à consulter les ressources en ligne pour en savoir plus, connaître les options des différentes commandes, etc. Bien débuter son script. ======================== Il est important de démarrer son script par une ligne qui indique que vous travaillez en bash. Sinon, c'est le shell par défaut de l'utilisateur qui sera utilisé pour exécuter le script, et si celui-ci n'est pas bash, le script risque d'avoir un comportement inattendu. .. code-block:: bash #!/bin/bash Écrire sur la sortie standard ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pour écrire sur la sortie standard, on utilise la commande ``echo``. Que peut-on faire dans un script ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dans un script, on peut faire tout ce que l'on peut faire en console, et même plus ! Autrement dit, toutes les commandes disponibles sur le système sont utilisables dans les scripts. Dans l'exemple ci-dessous, on a un petit script qui stocke le résultat de la commande ``ls`` dans le fichier ``ma_liste.txt`` (qui est créé pour l'occasion) et qui affiche sur la sortie standard le nombre de lignes du fichier ``ma_liste.txt``. Comment sauvegarder et exécuter un script ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Conventionnellement, on sauvegarde les scripts dans des fichiers dont l'extension est ``.sh``, pour les repérer plus facilement, mais ce n'est absolument pas une obligation. Pour exécuter le script, le plus simple est de donner à l'utilisateur qui le possède les droits d'exécution, en utilisant ``chmod``, puis de lancer le script en utilisant la commande ``./nom_du_script.sh``. L'autre solution consiste à utiliser la commande correspondant au shell qui doit exécuter le script : ``bash nom_du_script.sh``. Cette méthode permet d'exécuter le script avec l'option -x qui est l'option "mode debug". Comment mettre des commentaires dans mon script ? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Le symbole qui permet d'insérer un commentaire est ``#``. En résumé, un petit exemple de script : ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: bash #!/bin/bash echo "Hello World !" # Ceci est un script qui affiche "Hello World !" sur la sortie standard. La première ligne permet de charger le bon shell. En son absence, c'est le shell par défaut de l'utilisateur qui sera utilisé pour exécuter le script, et ce, à nos risques et périls. La dernière ligne est un commentaire. Petite parenthèse sur les variables d'environnement =================================================== Il est parfois utile d'avoir recours aux variables d'environnement du système. Voici une liste des principales variables à connaître : * ``$SHELL`` * ``$PATH`` * ``$HOME`` * ``$PWD`` * ``$OLDPWD`` Écrire des scripts en bash ========================== Variables et affectations ~~~~~~~~~~~~~~~~~~~~~~~~~ Comme mentionné plus haut, bash est un langage capricieux, faites très attention à l'emploi des espaces dans la déclaration et l'affectation des variables. .. code-block:: bash a=5; # Affectation de la valeur 5 à la variable a read a, b # Affectation de valeurs aux variables à partir des saisies clavier Emploi des guillemets simples, doubles, et des accolades ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. toctree:: :maxdepth: 5 scripts_exos.rst