Enchaînement et regroupement de commandes

Mise à jour : Debian 10.10

Sous Linux, l'exécution de plusieurs commandes peut s'effectuer

Sommaire

1 - Enchaînement de commandes

On dispose de trois types d'enchaînement :

1.1 - Enchaînement physique (pipeline)

$ commande1 | commande2      
$ cat /etc/apt/sources.list |wc -l
25
$ yes | sudo aptitude upgrade
$ echo '#######' |sudo tee /etc/test
$ pv ./*.png |zip <backup.zip
$ dd if=/dev/urandom count=1000 bs=1 |shasum
$ dd if=/dev/urandom count=1000 bs=1 |pv |shasum

1.2 - Enchaînement temporel

A; B          MODE SEQUENTIEL : Exécuter A puis B, indépendamment du succès de A
A & Exécuter A en arrière plan
A & B & MODE PARALLEL : Exécuter A et B en arrière plan
$ var=5; var=$((var+5)) ; echo $var
10
$ firefox & geany &

1.3 - Enchaînements conditionnels

A && B                      Exécuter B si A réussit
A || B                      Exécuter B si A échoue
A && B || C Exécuter B si A réussit, exécuter C si A échoue
$ date && echo commande date réussie
mardi 24 août 2021, 22:43:54 (UTC+0200)
commande date réussie

$ datexxx && echo commande date réussie
datexxx: command not found
$ date || echo commande date échouée
mardi 24 août 2021, 22:45:48 (UTC+0200)

$ datexx || echo commande date échouée
datexx: command not found
commande date échouée
$ date && echo commande date réussie || echo commande date échouée
mardi 24 août 2021, 22:46:55 (UTC+0200)
commande date réussie

$ datexx && echo commande date réussie || echo commande date échouée
datexx: command not found
commande date échouée

2 - Regroupements

2.1 - Principe

Les commandes peuvent être regroupées et exécutées

2.2 - Exemples

$ unset i; { for i in {1..4}; do echo $i ; done; } > test ; echo i=$i
i=4

$ cat test
1
2
3
4
$ unset i; (for i in {1..4}; do echo $i ; done) > test ; echo i=$i
i=

$ cat test
1
2
3
4
$ rm test;(umask 66;touch test); ls -og test
-rw------- 1 0 août 24 23:01 test
$ (set -o posix ; set )
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
.....

3 - Redirection et enchaînement physique

Pour ne pas confondre Enchaînement physique (pipeline) et Redirection.
$ echo test |shasum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 -
$ echo test >démofile
$ cat démofile
test


$ echo test |shasum |wc -c
44
$ echo test >démofile
$ cat démofile
test

$ >démofile echo test
cat démofile
test
$ shasum <démofile
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 -

$ <démofile shasum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 -
$ <démofile shasum >shafile
$ cat shafile
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 -

$ shasum <démofile >shafile
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 -
$ <demofile shasum |hexdump -C 2>errorfile|wc -c >countfile
$ cat countfile
242

$ shasum <demofile |2> errorfile hexdump -C |>countfile wc -c
16:54 philippe@debian:~$ cat countfile
242
$ sort <<EOF  |tr '[a-z]' '[A-Z]' >test
> Classement
> Par
> Ordre
> Alphabétique
> EOF

$ cat test
ALPHABéTIQUE
CLASSEMENT
ORDRE
PAR