Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:shell:shell [08/08/2015 18:31] milou [Enchaîner plusieurs commandes] |
doc:programmation:shell:shell [23/07/2024 22:33] (Version actuelle) Jean-Pierre Pinson [Naviguer dans les fichiers et les dossiers] |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
* Suivi : {{tag>à-completer à-tester}} | * Suivi : {{tag>à-completer à-tester}} | ||
* Création par [[user>captnfab]] 30/09/2013 | * Création par [[user>captnfab]] 30/09/2013 | ||
- | * Testé par <...> le <...> FIXME | + | * Testé par <...> le <...> |
* Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=68350 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=68350 | ici]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
Ligne 45: | Ligne 45: | ||
Le //prompt// ou invite de commande est le petit texte qui est déjà affiché quand on lance le shell et qui reste affiché quand on appuie sur la touche <key>Entrée</key> | Le //prompt// ou invite de commande est le petit texte qui est déjà affiché quand on lance le shell et qui reste affiché quand on appuie sur la touche <key>Entrée</key> | ||
- | Souvent, le prompte ressemble à ça : ''nom-d-utilisateur@nom-de-la-machine:dossier-courant$''. | + | Souvent, le prompt ressemble à ça : ''nom-d-utilisateur@nom-de-la-machine:dossier-courant$''. |
<note info>Le dossier courant pouvant être abrégé en ''~'' s'il s'agit du dossier personnel (par défaut).</note> | <note info>Le dossier courant pouvant être abrégé en ''~'' s'il s'agit du dossier personnel (par défaut).</note> | ||
Ligne 96: | Ligne 96: | ||
<code user>cd /usr</code> | <code user>cd /usr</code> | ||
* Je me place dans /usr/bin | * Je me place dans /usr/bin | ||
- | <code user>cd bin</code> | + | <code user>cd /bin</code> |
* Je liste les fichiers et dossiers de /usr/bin | * Je liste les fichiers et dossiers de /usr/bin | ||
<code user>ls</code> | <code user>ls</code> | ||
Ligne 131: | Ligne 131: | ||
Dans un shell, il faut penser //flux//. Un flux est une sorte de fichier, qui se construit au fur et à mesure et n'est présent qu'en mémoire. | Dans un shell, il faut penser //flux//. Un flux est une sorte de fichier, qui se construit au fur et à mesure et n'est présent qu'en mémoire. | ||
Par exemple, | Par exemple, | ||
- | * tout ce qu'affiche un programme (comme ''ls'' ou ''pwd'' est un flux, affiché directement sur le terminal. | + | * tout ce qu'affiche un programme (comme ''ls'' ou ''pwd'' est un flux, affiché directement sur le terminal). |
* tout ce que tape un utilisateur pendant qu'il utilise un programme du terminal est un flux. | * tout ce que tape un utilisateur pendant qu'il utilise un programme du terminal est un flux. | ||
- | <note info>Cela vaut en particulier pour le shell ! Vous pouvez le vérifier en tapant la combinaison de touche correspondant à une //fin de fichier// (ou fin de flux) : <key>C-d</key> **paf** le shell se ferme, parce que son flux d'entré est terminé :-) | + | <note info>Cela vaut en particulier pour le shell ! Vous pouvez le vérifier en tapant la combinaison de touches correspondant à une //fin de fichier// (ou fin de flux) : <key>C-d</key> **paf** le shell se ferme, parce que son flux d'entrée est terminé :-) |
</note> | </note> | ||
Ligne 147: | Ligne 147: | ||
Admettons que vous vouliez lancer un premier programme, qui fournit alors un flux de sortie, puis donner ce flux de sortie à un deuxième programme pour qu'il y fasse un second traitement. | Admettons que vous vouliez lancer un premier programme, qui fournit alors un flux de sortie, puis donner ce flux de sortie à un deuxième programme pour qu'il y fasse un second traitement. | ||
- | Par exemple, vous voulez lister l'ensemble des fichiers dans ''/usr/bin'' (via ''ls'') mais vous ne voulez garder seulement les fichiers comportant ''term'' dans leur nom. Vous utiliserez alors la commande ''grep'' pour faire la 2e opération, qui fonctionne à la manière d'un filtre : | + | Par exemple, vous voulez lister l'ensemble des fichiers dans ''/usr/bin'' (via ''ls'') mais vous ne voulez garder seulement que les fichiers comportant ''term'' dans leur nom. Vous utiliserez alors la commande ''grep'' pour faire la 2e opération, qui fonctionne à la manière d'un filtre : |
<code user>ls /usr/bin | grep 'term'</code> | <code user>ls /usr/bin | grep 'term'</code> | ||
Ligne 165: | Ligne 165: | ||
<note info>Notez qu'ici, nous avons donné trois arguments à ''echo'' : | <note info>Notez qu'ici, nous avons donné trois arguments à ''echo'' : | ||
* Le premier argument est du texte simple, ils est donc entre guillemets simples : '' ' ''. | * Le premier argument est du texte simple, ils est donc entre guillemets simples : '' ' ''. | ||
- | * Le second argument comporte un code qui doit être interprété par le shell ''$(pwd)'' il doit donc donné entre guillemets doubles : '' " ''. | + | * Le second argument comporte un code qui doit être interprété par le shell ''$(pwd)'' il doit donc donner entre guillemets doubles : '' " ''. |
* Pour ne pas confondre l'apostrophe du troisième argument avec la fin d'un argument, il est indiqué entre guillemets doubles également. | * Pour ne pas confondre l'apostrophe du troisième argument avec la fin d'un argument, il est indiqué entre guillemets doubles également. | ||
</note> | </note> | ||
Ligne 185: | Ligne 185: | ||
===== Variables et environnement ===== | ===== Variables et environnement ===== | ||
- | Dans un shell, il y a tout un tas de variables qui lui sont transmises la le processus l'ayant lancé. On les appelles les variables d'environnement, et elles sont listées par la commande ''env'' : | + | Dans un shell, il y a tout un tas de variables qui lui sont transmises par le processus l'ayant lancé. On les appelle les variables d'environnement, et elles sont listées par la commande ''env'' : |
<code user>env</code> | <code user>env</code> | ||
Ligne 218: | Ligne 218: | ||
<code user>iceweasel &</code> | <code user>iceweasel &</code> | ||
- | Avec cela, iceweasel va être lancé, mais vous aurez toujours la main dans le shell (tapes entrée pour le vérifier.) | + | Avec cela, iceweasel va être lancé, mais vous aurez toujours la main dans le shell (tape <key>entrée</key> pour le vérifier.) |
<note tip>Oups, j'ai oublié de mettre le ''&'', comment je fais ? | <note tip>Oups, j'ai oublié de mettre le ''&'', comment je fais ? | ||
Ligne 232: | Ligne 232: | ||
<note tip>Oups, j'ai oublié de mettre le ''!'', comment je fais ? | <note tip>Oups, j'ai oublié de mettre le ''!'', comment je fais ? | ||
- | Il suffit de taper ''disown leprogramme'' (faire tab pour voir les propositions)</note> | + | Il suffit de taper ''disown leprogramme'' (faire <key>Tab</key> pour voir les propositions)</note> |
===== Enchaîner plusieurs commandes ===== | ===== Enchaîner plusieurs commandes ===== | ||
Ligne 258: | Ligne 258: | ||
<note important>Il ne faut pas confondre le code retour de la commande avec son résultat. Le résultat est ce qui s'affiche à l'écran. Le code de retour est une valeur numérique qui peut être utilisé dans un test par exemple. \\ | <note important>Il ne faut pas confondre le code retour de la commande avec son résultat. Le résultat est ce qui s'affiche à l'écran. Le code de retour est une valeur numérique qui peut être utilisé dans un test par exemple. \\ | ||
- | On peu afficher le code retour de la dernière commande exécutée avec | + | On peut afficher le code retour de la dernière commande exécutée avec |
<code user>echo $?</code></note> | <code user>echo $?</code></note> | ||
Ligne 275: | Ligne 275: | ||
<code user>ls /usr/tmp/coucou || touch /usr/tmp/coucou</code> | <code user>ls /usr/tmp/coucou || touch /usr/tmp/coucou</code> | ||
- | <note tip>On peut combiner ces opérateur. Il suffit de se rapeller qu'il vont prendre en compte le code retour de la dernière commande exécutée.:-)</note> | + | <note tip>On peut combiner ces opérateurs. Il suffit de se rappeler qu'il vont prendre en compte le code retour de la dernière commande exécutée.:-)</note> |
Ces opérateurs fonctionnent un peu comme des tests //if//. Pour plus de précision sur les tests, on peut consulter : [[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]] | Ces opérateurs fonctionnent un peu comme des tests //if//. Pour plus de précision sur les tests, on peut consulter : [[doc:programmation:shell:avancee|Fonctionnalités avancées du Shell]] | ||
+ | ==== Quelques raccourcis en shell Linux ==== | ||
+ | Quelques raccourcis en shell Linux (à apprendre par cœur :-P) : | ||
+ | ^Raccourci clavier ^ Action ^ | ||
+ | | <key>C+a</key> | Déplace le curseur au début de la ligne | | ||
+ | | <key>C+E</key> | Déplace le curseur à la fin de la ligne | | ||
+ | | <key>C+K</key> | Efface du curseur à la fin de la ligne | | ||
+ | | <key>C+U</key> | Efface la ligne jusqu'au curseur. Efface donc la ligne si le curseur se trouve à la fin | | ||
+ | | <key>C+L</key> | Efface le terminal, équivalent ) ''clear'' | | ||
+ | | <key>C+W</key> | Effacer du caractère précédent le curseur jusqu'au début du mot | | ||
+ | | <key>A+←</key> | Comme <key>C+W</key> | | ||
+ | | <key>A+D</key> | Coupe la chaîne depuis le caractère situé sous le curseur jusqu’à la findu mot (si le curseur est placé au début d’un mot, coupe le mot) | | ||
+ | | <key>C+Y</key> | Colle la sélection précédemment coupée | | ||
+ | | <key>C+T</key> | Inverse les deux caractères précédent le curseur | | ||
+ | | <key>A+T</key> | Inverse deux mots précédent le curseur | | ||
+ | | <key>A+c</key> | Met en majuscule la lettre située sous le curseur et déplace le curseur à la fin du mot | | ||
+ | | <key>A+L</key> | Met en minuscule toutes les lettres depuis la position du curseur jusqu’à la fin du mot | | ||
+ | | <key>A+U</key> | Met en majuscule toutes les lettres depuis la position du curseur jusqu’à la fin du mot | | ||
+ | | <key>A+_</key> | Annule la modification précédente | | ||
+ | |||
+ | A noter que ces raccourcis claviers sont identiques à ceux utilisés dans l'éditeur de texte //emacs//. Il est possible d'obtenir un comportement identique à celui de //vi/vim// avec | ||
+ | <code user>set -o vi</code> | ||
+ | La ligne de commande est alors en mode insertion. Pour passer en mode normal permettant de se déplacer dans une ligne saisie avec [[doc:editeurs:vim:tableau|les raccourcis habituels de vim]], c'est <key>Esc</key>. Pour entrer en mode insertion, c'est <key>a</key> ou <key>i</key>. | ||
+ | |||
+ | Pour retrouver les raccourcis par défaut <code user>set -o emacs</code> | ||
+ | si vous utilisez zsh | ||
+ | |||
+ | ^Raccourci clavier ^ Action ^ | ||
+ | | <key>Echap+H</key> | Aide de la commande en cours de saisie | | ||
+ | | <key>Echap+Q</key> | Efface la ligne courante, mais la ré-affichera une fois la commande courante terminée(Ma préférée :-)) | | ||
===== Tableau des Shell disponibles ===== | ===== Tableau des Shell disponibles ===== | ||
- | ^SHELL ^ NIVEAU ^ COMMENTAIRES ^ | + | ^SHELL ^ COMMENTAIRES ^ |
- | |[[:doc:programmation:bash]] |TOUS |Le shell utilisateur par défaut sous Débian | | + | |[[:doc:programmation:bash]] |Le shell utilisateur par défaut sous Débian | |
- | |dash |TOUS |Le shell système par défaut sous Débian | | + | |dash |Le shell système par défaut sous Débian | |
- | |zsh |TOUS |Un shell utilisateur très paramétrable | | + | |zsh |Un shell utilisateur très paramétrable (Le SHELL ULTIME :)) | |