Bien que ce soit une première approximation juste quand on commence à apprendre les bases de l'utilisation des shells, au niveau de "voici comment on exécute un programme" et "voici comment on exécute plusieurs programmes les uns après les autres sur une seule ligne" , ce n'est pas vraiment vrai.
Le plus difficile à comprendre pour un débutant mais une explication plus correcte est que le langage shell est un langage informatique . Il a une syntaxe . Cette syntaxe comprend divers éléments lexicaux, y compris (entre autres) des sauts de ligne, des opérateurs, des mots et des mots réservés.
if
, then
, else
Et fi
sont tous des mots réservés . Ils ont des significations particulières lors de l' analyse de l'entrée que l'on donne à un shell, selon sa grammaire . De même, ;
est un opérateur séparateur .
L'entrée en langage shell est donc, prise dans son ensemble, un programme informatique qui est interprété par un autre programme, un interprète , le shell. Ses parties grammaticales individuelles ne sont pas des programmes. Le langage shell est un moyen de spécifier (d'autres) programmes à exécuter par le shell.
[
n'est pas un élément lexical spécial dans la grammaire du shell tel qu'un opérateur. C'est un mot ordinaire , qui nomme un tel programme nommé [
. De nombreux shells ont une version intégrée de ce programme, combinée dans le code du programme shell lui-même, mais vous pouvez également trouver un programme externe de ce nom quelque part comme /bin/[
ou /usr/bin/[
, que d' autres programmes que les shells peuvent invoquer. De même, ce ]
n'est pas non plus un élément lexical shell spécial. C'est un mot ordinaire, qui devient un argument pour le [
programme. Le [
programme requiert que son argument final, lors de son exécution, soit ]
, qu'il procède ensuite à ignorer.
Un autre programme similaire nommé dans votre question est echo
. Encore une fois, la plupart des shells ont une version intégrée de ce programme. Mais encore une fois, il existe également une version externe du programme, quelque part comme /bin/echo
ou /usr/bin/echo
, pour les programmes autres que les shells à invoquer.
Un troisième programme nommé dans votre question est ls
. Les shells n'ont généralement pas de versions intégrées de ce programme, et il s'agit d'un programme externe, à trouver quelque part comme /bin/ls
ou /usr/bin/ls
.
Pour le shell Bourne Again, vous pouvez en savoir plus à ce sujet dans la section Basic Shell Features of the GNU Bourne Again shell info documentation. D'autres coquilles ont naturellement des grammaires différentes. La spécification Unix unique décrit une syntaxe à laquelle tous les shells conformes POSIX (dans leurs modes conformes POSIX) sont censés adhérer.
Lectures complémentaires
- " Shell Grammar ". Langage de commande Shell . Spécifications de base Problème 7. Le groupe ouvert. IEEE 1003.1-2008. ISBN 1937218812.
test
. Utilitaires . Spécifications de base Problème 7. Le groupe ouvert. IEEE 1003.1-2008. ISBN 1937218812.
- " Shell Grammar ". Le manuel Z Shell . version 5.3.1. 2017.