Both sides previous revisionPrevious revision | Next revisionBoth sides next revision |
informatique:linux:bash [2021/04/05 16:24] – [Liens/Ressources] pteu | informatique:linux:bash [2021/07/30 13:37] – relecture partielle pteu |
---|
{{:informatique:linux:bash_logo.png?nolink&200 |}} | {{:informatique:linux:bash_logo.png?nolink&200 |}} |
| |
**Bash** est un interpréteur de commande, un "shell". Il possède beaucoup de caractéristiques et fonctions communes avec ''sh'' ou ''zsh''. | **Bash** est un interpréteur de commande, un "shell". Il possède beaucoup de caractéristiques et fonctions communes avec ''sh'', ''ksh'', ''zsh'' ou plus largement ''*sh''. |
| |
Pour la partie programmation et les variables, voir la page [[informatique:linux:programmation_shell|Programmation Shell]]. | Cette page se concentrera sur la prise en main de **bash**, sa configuration, ses raccourcis clavier, les enchaînements de commandes et quelques tips ; pour la partie programmation/scripting et variables, voir la page [[informatique:linux:programmation_shell|Programmation Shell]]. |
| |
| |
* ''^foo^bar'' relancer la dernière commande en remplaçant la première occurrence de "foo" par "bar". Pour supprimer "foo" : ''^foo'' tout court. | * ''^foo^bar'' relancer la dernière commande en remplaçant la première occurrence de "foo" par "bar". Pour supprimer "foo" : ''^foo'' tout court. |
* ''!!:gs/foo/bar'' relance la dernière commande en remplaçant toutes les occurrences de "foo" par "bar". | * ''!!:gs/foo/bar'' relance la dernière commande en remplaçant toutes les occurrences de "foo" par "bar". |
| |
=====Syntaxe===== | =====Syntaxe===== |
| |
* ''<cmd1>&&<cmd2>'' permet de lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //true// (se termine correctement) | * ''<cmd1>&&<cmd2>'' permet de lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //true// (se termine correctement) |
* ''<cmd1>||<cmd2>'' lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //false// | * ''<cmd1>||<cmd2>'' lancer //<cmd1>//, puis //<cmd2>// uniquement si //<cmd1>// renvoie //false// |
* ''<cmd1>|<cmd2>'' redirige la sortie standart de //<cmd1>// vers l'entrée standard de //<cmd2>// | * ''<cmd1>|<cmd2>'' redirige la sortie standard de //<cmd1>// vers l'entrée standard de //<cmd2>// |
* ''<cmd1>|xargs <cmd2>'' convertit la sortie de //<cmd1>// en paramètres de //<cmd2>// | * ''<cmd1>|xargs <cmd2>'' convertit la sortie de //<cmd1>// en paramètres de //<cmd2>// |
* ''<cmd> > <fic>'' redirige la sortie (STDOUT) de //<cmd>// vers le fichier //<fic>// (le fichier est vidé (>)) | * ''<cmd> > <fic>'' redirige la sortie (STDOUT) de //<cmd>// vers le fichier //<fic>// (le fichier est vidé (>)) |
* ''<cmd> >> <fic>'' redirige la sortie de //<cmd>// à la fin du fichier //<fic>// (>>) | * ''<cmd> <nowiki>>></nowiki> <fic>'' redirige la sortie de //<cmd>// à la fin du fichier //<fic>// (<nowiki>>></nowiki>) |
* ''<cmd> 2><fic>'' redirige la sortie d'erreur (STDERR) vers //<fic>// | * ''<cmd> 2> <fic>'' redirige la sortie d'erreur (STDERR) vers //<fic>// |
On trouvera par exemple ''<cmd> >/dev/null 2>/dev/null'' pour que //<cmd>// n'affiche rien à l'écran (ni la sortie standart ni la sortie d'erreur). | On trouvera par exemple ''<cmd> >/dev/null 2>/dev/null'' pour que //<cmd>// n'affiche rien à l'écran (ni la sortie standard ni la sortie d'erreur). |
* ''<cmd> 2>&1'' redirige la sortie d'erreur vers la sortie standart (**&1**) | * ''<cmd> 2> &1'' redirige la sortie d'erreur vers la sortie standard (**&1**) |
* ''<cmd> < <fic>'' redirige le contenu de //<fic>// sur l'entrée standart de //<cmd>// | * ''<cmd> < <fic>'' redirige le contenu de //<fic>// sur l'entrée standard de //<cmd>// |
* Les doubles quotes ''"'' n'interprètent que les caractères spéciaux **$**, **\** et **'** (quote) | * Les apostrophes (quotes) permettant de définir une chaîne de caractère contenant des espaces : |
* Les simples quotes ''''' n'interprètent aucun caractère spécial | * les doubles quotes ''"'' interprètent les caractères spéciaux **$**, **\** et **'** (quote) |
| * les simples quotes ''''' n'interprètent aucun caractère spécial |
* Les caractères spéciaux sont : ''& ~ ; \ " ' ` # ( ) [ ] | $ * ! ? < >'' | * Les caractères spéciaux sont : ''& ~ ; \ " ' ` # ( ) [ ] | $ * ! ? < >'' |
| |
====-e==== | ====-e==== |
| |
bash se termine lorsqu'il voit un code de retour en erreur (différent de 0). Pratique pour éviter que des erreurs non prévues dans un script ne provoquent des bêtises. | **bash** se termine lorsqu'il voit un code de retour en erreur (différent de 0). Pratique pour éviter que des erreurs non prévues dans un script ne provoquent des bêtises. |
Cependant ça ne marche pas correctement avec certaines commandes comme grep, qui retourne 1 s'il ne matche pas (ce qui n'est certainement pas une erreur qui vaut le coup que l'on stoppe le script). Alors, comme indiqué dans [[https://stackoverflow.com/questions/9952177/whats-the-meaning-of-the-parameter-e-for-bash-shell-command-line/9952249|ce thread de stackoverflow]] : | Cependant ça ne marche pas correctement avec certaines commandes comme grep, qui retourne 1 s'il ne matche pas (ce qui n'est certainement pas une erreur qui vaut le coup que l'on stoppe le script). Alors, comme indiqué dans [[https://stackoverflow.com/questions/9952177/whats-the-meaning-of-the-parameter-e-for-bash-shell-command-line/9952249|ce thread de stackoverflow]] : |
* soit on gère l'erreur avec un ''grep TRUC machin.txt || :'' : on gère l'erreur pour que bash ne la "voit" pas. Cependant ce n'est pas idéal car on masque tous les codes d'erreur (pas que 1). | * soit on gère l'erreur avec un ''grep TRUC machin.txt || :'' : on gère l'erreur pour que bash ne la "voit" pas. Cependant ce n'est pas idéal car on masque tous les codes d'erreur (pas que 1). |