====== La nature des commandes du shell ======
* Objet : Connaître la nature des commandes du shell
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : Mieux appréhender le shell bash et ses constituants
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag>à-placer}}
* Création par [[user>cyrille]] 02/08/2021
* Relecture et complément par [[user>vv222]], [[user>enicar]] 02/08/2021
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=30409 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
===== Introduction : Les différents types de commandes Linux=====
Le shell, en plus d'être un langage de programmation, est aussi un interpréteur de commandes accessible depuis la console (aussi appelé terminal).
On peut y rencontrer des commandes de natures différentes. Pour connaître leur nature ou leur type, on utilisera la commande **type**
__Usage__
type commande
type -t commande
type -a commande
Généralement, on en distingue 5.
==== 1. Les primitives ====
Ce sont des commandes internes (construites dans le shell (ainsi nommées "shell builtins")), aussi appelées primitives du shell.
//**Ces commandes primitives ne génèrent pas de nouveaux processus, contrairement aux commandes externes.**//
Pour avoir de l'aide quant à ces commandes, il faut passer par **help** (**help cd**).
On trouve les commandes : set, cd, help, true, false, test, exec, echo, pwd...
Par exemple :
type -a cd echo pwd true
cd est une primitive du shell
echo est une primitive du shell
echo est /usr/bin/echo
echo est /bin/echo
pwd est une primitive du shell
pwd est /usr/bin/pwd
pwd est /bin/pwd
true est une primitive du shell
true est /usr/bin/true
true est /bin/true
==== 2. Les commandes externes (fournies par des fichiers) ====
Les commandes externes sont des programmes compilés ou des scripts installés sur le système.
Contrairement aux commandes primitives, elles généreront un nouveau processus.
Pour accéder à l'aide de ces commandes, il faut passer par la commande **man** ou passer le paramètre **--help** à la commande.
Par exemple :
type -a mv cp rm
mv est /usr/bin/mv
mv est /bin/mv
cp est /usr/bin/cp
cp est /bin/cp
rm est /usr/bin/rm
rm est /bin/rm
==== 3. Les alias ====
Les alias sont des raccourcis de commandes ou de groupes de commandes fastidieuses à saisir en raison de leur longueur ou de leurs options.
En utilisant un alias, ces commandes sont plus simples à retenir puisque limitées à un mot unique.
Exemple d'alias :
alias monipv6='curl "https://api64.ipify.org?format=json"'
Les alias sont permanents s'ils ont été définis soit dans le fichier .bashrc soit dans le fichier .bash_aliases (si .bashrc contient une entrée vers ce fichier).
Par exemple
type -a ls
ls est un alias vers « ls --color=auto »
ls est /usr/bin/ls
ls est /bin/ls
type -a monipv6
monipv6 est un alias vers « curl "https://api64.ipify.org?format=json" »
==== 4. Les fonctions du shell ====
Une fonction est une sous-routine du shell qui permet d'éviter répétitions, de diminuer les risques de bogues et d'augmenter la lisibilité du script pour un humain.
type -a mp3CoverTag
mp3CoverTag est une fonction
mp3CoverTag ()
{
for file in *.mp3;
do
eyeD3 --add-image "cover.jpg:FRONT_COVER" "$file";
done
}
==== 5. Les mots clefs ====
C'est le dernier type que l'on peut rencontrer. Il s'agit de mots clefs ou keywords, aussi connu sous le terme de mots réservés lesquels ne peuvent être utilisé pour définir des variables ou des fonctions. Ils permettront l’écriture de programmes bash ainsi que la structuration de commandes complexes.
type -a if else then
if est un mot-clé du shell
else est un mot-clé du shell
then est un mot-clé du shell
===== Conclusion =====
Voici un aperçu rapide de la nature des commandes que l'on peut trouver dans un système Linux. A côté de ces commandes, on peut également trouver des méta caractères, ou globs ou patterns mais ceux-ci ne seront pas abordés ici.