Bash
Utilisation et syntaxe de scripts bash
Un script bash commence par #!/bin/bash (commentaire spécial) pour indiquer quel interpréteur de commandes utiliser. Il a par convention l'extension de fichier .sh.
Je peux le rendre exécutable avec chmod +x
Pour que mon script soit exécuté sans que j'ai besoin d'indiquer son chemin, il faut le placer dans un des répertoires qui sont stockés dans la variable système PATH, qui recense les lieux où se trouvent les exécutables. Je peux afficher son contenu par un echo $PATH
Les commentaires sont précédés de #
Variables
Une variable se déclare comme suit :
nom='variable'
Attention : Pas d'espaces autour du =. Un apostrophe peut être inséré dans la variable par un \, un retour de chariot avec \n. Et pour afficher une variable, on utilise echo $variable (avec l'option -e pour utiliser des \n). Cependant, on ne peut pas utiliser $variable dans des quotes ' '. Il existe plusieurs types de quotes:
- Les apostrophes ' : la variable n'est pas analysée et affichée comme telle
- Les guillemets " : la variable est analysée et son contenu est affiché; bash cherche des symboles spéciaux et les interprète.
- Les back quotes ` (AltGr + 7) : bash exécute ce qu'il trouve; les back quotes s'utilisent à la création de la variable : variable=`commande`
La saisie utilisateur se fait avec la commande read.
- read nom : on affiche rien, on attend juste que l'utilisateur entre une valeur
- read nom prenom : on enregistre dans deux variables, avec deux valeurs attendues, si l'utilisateur donne plus, tout ce qui reste va dans la dernière variable.
- read -p 'Entrez une valeur' variable : On affiche un prompt, pour indiquer à l'utilisateur ce que l'on attend
- read -n 10 nom : On limite à 10 caractères. L'entrée s'arrête d'elle même arrivée à 10 caractères.
- read -t 10 variable : on limite le temps donné pour entrer la valeur (temps en secondes)
- read -s variable : on affiche pas le texte saisi par l'utilisateur
Variables d'environnement
Aussi appelées variables globales, une fois définies, elles sont disponibles dans tout le système. On peut les lister avec env. Certaines parmi les plus utiles sont :
SHELL
: indique quel type de shell est en cours d'utilisation (sh, bash, ksh…) ;
PATH
: une liste des répertoires qui contiennent des exécutables que vous souhaitez pouvoir lancer sans indiquer leur répertoire. Nous en avons parlé un peu plus tôt. Si un programme se trouve dans un de ces dossiers, vous pourrez l'invoquer quel que soit le dossier dans lequel vous vous trouvez ;
EDITOR
: l'éditeur de texte par défaut qui s'ouvre lorsque cela est nécessaire ;
HOME
: la position de votre dossier home
;
PWD
: le dossier dans lequel vous vous trouvez ;
OLDPWD
: le dossier dans lequel vous vous trouviez auparavant.
On peut les appeller dans notre script en utilisant leur nom :
echo "$HOME est votre dossier home!"
On peut en définir avec la commande export.
Variables des paramètres
Un script bash peut accepter des paramètres, données lorsque on l'appelle: ./script parametre1 parametre2
On peut y accéder via des variables qui sont crées automatiquement:
- $# : contient le nombre de paramètres
- $0 : contient le nom du script
- $1 : contient le premier paramètre
- ...
- $9 : contient le neuvième paramètre
Si on a plus de 9 paramètres, on utilise la commande shift. Après un usage de shift, le paramètre 1 prend la valeur du paramètre 2 , le 2 prend la valeur du 3, etc. On pourra utiliser shift dans une boucle et traiter les paramètres un par un.
Les tableaux
Comme une liste en python, un tableau contient plusieurs cases. On l'initialise comme suit :
tableau=('valeur0' 'valeur1' 'valeur2')
Pour accéder à une des "cases" du tableau, on fait comme ça:
${tableau[2]} #Affiche la valeur de la case 2, sachant qu'on compte comme d'habitude à partir de 0
${tableau[*]} #Affiche toutes les cases
On peut initialiser une case comme suit:
tableau[2]='valeur'
Opérations mathématiques
Bash traite toutes les variables comme des string, par défaut. Il faut utiliser la commande let pour faire des calculs:
- let "a = 5"
- let "b = 2"
- let "c = a + b"
- echo $c #renverra 7
Les opérations disponibles :
- + addition
- - soustraction
- multiplication
- / division
- puissance
- % modulo
On peut aussi contracter les commandes comme en python : let "a = a * 3" est équivalent à let "a *= 3".
let ne gère que les entiers, les décimaux sont gérés par la commande bc.