====== 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.