La nature des commandes du shell

Vos petites astuces, répertoire des tutoriels et astuces
Répondre
Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

La nature des commandes du shell

Message par cyrille »

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

Code : Tout sélectionner

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 :

Code : Tout sélectionner

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 :

Code : Tout sélectionner

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.

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). Plus d'infos sur les alias .bashrc .bash_aliases .

Exemple d'alias :

Code : Tout sélectionner

alias monipv6='curl "https://api64.ipify.org?format=json"'
Par exemple

Code : Tout sélectionner

type -a ls
ls est un alias vers « ls --color=auto »
ls est /usr/bin/ls
ls est /bin/ls

Code : Tout sélectionner

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.

Code : Tout sélectionner

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.

Code : Tout sélectionner

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.
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
Tux03
Messages : 163
Enregistré le : lun. 2 août 2021 15:24
Localisation : 2eme porte à gauche

Re: La nature des commandes du shell

Message par Tux03 »

Merci pour ce joli tutoriel cyrill, cela pourra certainement servir à moi et à d'autres le moment venu, notamment pour automatiser certaine taches. ;)
(En fait je m'étais déjà "confectionné" quelques petits script shell, à l'époque, sous Mandriva, pour, entre autre, xrandr et wine)
Mais ne serait il pas plus à sa place dans la rubrique "Tuto" ? (Ou alors c'est prevu...)

PS: Je viens de me taper une "passionnante" lecture sur la différence entre le Shell (sh) et le Bash. Les différences sont assez ...subtiles ! :mrgreen:
https://qastack.fr/programming/5725296/ ... h-and-bash
PC1: Acer Aio : I3-3220/4GoDDR3/Hdd160go Dual Boot Win10-1903 / Lubuntu 20.04lts (lxqt)
PC : "Autres": un peu de tout et n'importe quoi sous: XP/Win7/Win10 et Linux Mint 20.2 (xfce)

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: La nature des commandes du shell

Message par cyrille »

Thx,

Oui ça va aller dans T&A, juste le temps que deb le transfère ;) Mias une fois à cette place, il sera en lecture seule...

oui subtiles différences entre bash et sh, mais en fonction du sheebang, le script plante ou passe (notamment les structures conditionnelles), on peut se relire X fois, et à la fin on se dit "Et merde, c'est du sh et non du bash..." ;)
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: La nature des commandes du shell

Message par arghlub »

Salut,
cyrille a écrit :
mer. 4 août 2021 23:57
Oui ça va aller dans T&A, juste le temps que deb le transfère ;) Mias une fois à cette place, il sera en lecture seule...
débitant (modérateur) va le faire mais c'est un fainéant, je ne sais pas s'il mérite son salaire (0+0=la tête à toto) :l :lol: :lol: :arrow:
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

Avatar du membre
débitant
modérateur
Messages : 11534
Enregistré le : mar. 14 juil. 2015 18:22
Localisation : Lorraine France

Re: La nature des commandes du shell

Message par débitant »

je ferais remarquer à ces messieurs que le fainéant a fait le nécessaire le 3/8/21 donc s'en est un autre de fainéant qui n'a pas fait son job, hein chef :l :lol:

Répondre