Bash : généralités
Les shells
Un shell est un interpréteur de commandes, permettant d'accéder aux fonctionnalités internes de l'OS. Un shell est également un langage de programmation qui se présente sous la forme d'une ligne de commande depuis une console ou un terminal.
Sur les systèmes de type Unix nous trouvons entre autres :
- sh : Bourne Shell, l'ancêtre
- bash : Bourne Again Shell; une amélioration du Bourne Shell, disponible par défaut sous Linux, Mac OS X et est porté sous Windows par le projet Cygwin. Depuis Windows 10 et Windows Server 2019, l'interface WSL fournit un noyau compatible Linux avec un shell BASH.
- ksh : Korn Shell, un shell puissant dispo sur les Unix propriétaires, mais aussi en version libre compatible avec bash.
- csh : C shell : il utilise une syntaxe proche du C
- tcsh : Tenex C Shell : Amélioration du C shell.
- zsh : Z shell : shell récent reprenant les meilleurs idées de bash, ksh, tcsh.
On se concentrera ici sur Bash.
Scripts
Pour automatiser plusieurs commandes, il suffit de les écrire dans un fichiers ASCII d'extension .sh. Quelques points essentiels :
- Un éditeur de texte suffit
- Il faut donner les droits d'exécution au fichier
- Le lancement du script se fait par son nom : ./hello.sh
- Un script commence toujours par #!<shell>, qui permet de définir le chemin du shell utilisé
- ! Le shabang indique que c'est un script
- Un commentaire bash se fait avec #
Expression arithmétiques
À l'inverse de nombreux langages de programmation, le BASH ne type pas ses variables. Le contenu des variables BASH est stocké comme une chaîne de caractère. En affectant 1 à une variable ce ne sera donc le chiffre 1 que l'on stockera dans la variable mais le caractère ascii 49 !
Pour effectuer des opérations sur les entiers, on utilise l'expression ((expression))
Quand l'évaluation de l'expression de retour donne un valeur différente de 0, le code de retour de l'opération arithmétique est égal à 0; sinon il est égal à 1.
BASH $> ((5)) BASH $> echo $? 0 BASH $> ((0)) BASH $> echo $? 1 BASH $>
Utilisation
L'évaluation n'affiche rien dans la sortie standard; il faut utiliser $ :
BASH $> echo $((5+2)) 7 BASH $> echo "Il y a $(( $(ls -l | wc -l) -1 )) fichiers dans le répertoire courant" Il y a 88 fichiers dans le répertoire courant BASH $>
L'expression arithmétique peut contenir n'importe quel entier; cependant, bash ne connait pas l'arithmétique avec des virgules ! Pour des calculs plus complexes, il faut utiliser bc.
Principaux opérateurs
- ... pour la post-incrémentation
- var++ ou var--
- ... pour la pré-incrémentation
- ++var ou --var
- ... pour l' exposant
- var1 ** var2
- ... pour l'addition
- var1 + var2
- ... pour la soustraction
- var1 - var2
- ... pour la multiplication
- var1 * var2
- ... pour la division entière
- var1 / var2
- ... pour le reste
- var1 % var2
- ... pour l'égalité
- var1 == var2
- ... pour la différence
- var1 != var2
- ... pour la comparaison (et >, <=, >=)
- var1 < var2
- ... pour le ET logique
- var1 && var2
- ... pour le OU logique
- var1 || var2