Différence entre Sh et Bash
- Qu’est-ce qu’un shell ?
- Comment trouver le shell actuel
- Comment trouver les shells disponibles
-
La commande
sh
et son utilisation -
Bash
et son utilisation
Ce tutoriel explique ce qu’est un shell, connaître le shell actuellement utilisé, vérifier la liste de tous les shells disponibles, et la différence entre sh
et bash
.
Qu’est-ce qu’un shell ?
Un shell est un programme informatique qui prend des commandes. Il interprète également les commandes et les transmet au système d’exploitation pour traitement. Il agit comme une interface entre l’utilisateur et le système d’exploitation, à travers laquelle l’utilisateur peut interagir avec le système d’exploitation.
La plupart des systèmes d’exploitation Linux sont livrés avec au moins un seul programme shell. Le programme shell sera Bash
, Dash
ou les deux.
Comment trouver le shell actuel
Pour connaître le shell actuellement utilisé sur un système Linux, nous pouvons lire le fichier /etc/passwd
car il stocke les informations du compte utilisateur. Exécutons la commande ci-dessous pour connaître le shell actuel.
La commande grep
permet de rechercher une chaîne de caractères dans un fichier spécifié. La commande ci-dessous recherche l’utilisateur fumba
dans le fichier passwd
situé dans /etc
. Lorsque la commande grep
trouve une correspondance, elle imprime la ligne avec le résultat.
$ grep fumba /etc/passwd
W peut voir à partir de la sortie ci-dessous que le shell par défaut pour l’utilisateur fumba
est bash.
fumba:x:1000:1000:,,,:/home/fumba:/bin/bash
Comment trouver les shells disponibles
Tous les shells disponibles dans les systèmes Linux sont répertoriés dans le fichier /etc/shells
. Nous utilisons la commande cat
ci-dessous pour afficher le contenu du fichier /etc/shells
.
cat /etc/shells
La sortie ci-dessous affiche la liste de tous les shells disponibles sur notre système.
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
La commande sh
et son utilisation
sh
est un nom de commande pour le shell Bourne. C’est l’interpréteur de langage de commande standard pour les systèmes d’exploitation de type Unix. Il exécute des commandes à partir d’une chaîne de ligne de commande, de l’entrée standard ou d’un fichier spécifié. sh
est conforme aux normes POSIX.
L’interface de système d’exploitation portable (POSIX) est une famille de normes spécifiées par l’IEEE Computer Society pour maintenir la compatibilité entre les systèmes d’exploitation. Ces normes aident à développer des logiciels multiplateformes pour plusieurs systèmes d’exploitation une fois que les normes sont respectées.
La plupart des systèmes ont le fichier /bin/sh
, mais c’est un lien symbolique et n’invoquera pas sh
. Dans Ubuntu, /bin/sh
est un lien symbolique vers le shell Dash
. Nous pouvons vérifier en exécutant la commande ci-dessous.
$ file -h /bin/sh
La sortie ci-dessous montre que /bin/sh
est un lien symbolique vers dash
.
/bin/sh: symbolic link to dash
Ajoutons #!/bin/sh
à un script.
#!/bin/sh
printf "sh points to dash!\n"
Le script ci-dessus spécifie /bin/sh
comme interpréteur. Cependant, étant donné que /bin/sh
pointe vers dash
, le shell dash
exécutera le script en tant qu’interpréteur.
Bash
et son utilisation
Bash
signifie Bourne Again shell. Comme sh
, c’est un processeur de langage de commande et un shell. Cependant, bash est un sur-ensemble de sh
. Il prend en charge les fonctionnalités de sh
et fournit plus d’extensions et de fonctionnalités. Bash
est le shell par défaut pour les systèmes d’exploitation Linux.
Au début, Bash
était conforme aux normes POSIX, mais il a cessé de suivre les normes POSIX au fil du temps à mesure que de nouvelles fonctionnalités et extensions étaient ajoutées. Cependant, bash peut toujours être utilisé en mode POSIX en définissant le drapeau -posix
, comme indiqué ci-dessous.
$ bash --posix
Écrivons un script bash conforme au standard POSIX.
#!/bin/bash
set -o posix
printf "we are using bash shell!\n"
L’interpréteur bash
exécutera le script ci-dessus puisqu’il a été spécifié dans la première ligne, #!/bin/bash
.
La commande set
active les options dans le script. Dans notre cas, cela permet au shell bash d’exécuter le script en mode POSIX.