I. Quelques formes des lignes de commandes.


                                                Forme simple


1.
[user1@salle224-05 TP02]$ man echo

NAME
       echo - display a line of text

SYNOPSIS
       echo [SHORT-OPTION]... [STRING]...

DESCRIPTION
       Echo the STRING(s) to standard output.

La commande echo affiche sur la sortie standard les chaines de caracteres passees en argument[cite: 1, 2]

2.
[user1@salle224-05 TP02]$ echo "Hello world!"
Hello world!

3.
[user1@salle224-05 TP02]$ echo "$?"
0

Le code de sortie 0 indique que la commande precedente (echo) s'est executee sans erreur[cite: 1, 2]

4.
[user1@salle224-05 TP02]$ ls fi
fi

5.
[user1@salle224-05 TP02]$ echo "$?"
0

Le fichier fi existe, la commande ls se termine correctement avec un code de sortie egal a 0[cite: 1, 2]

6.
[user1@salle224-05 TP02]$ ls -l fi
-rw-r--r-- 1 user1 users 0 Sep 16 14:00 fi

7.
[user1@salle224-05 TP02]$ echo "$?"
0

8.
[user1@salle224-05 TP02]$ ls nofi
ls: cannot access 'nofi': No such file or directory

9.
[user1@salle224-05 TP02]$ echo "$?"
2

Le fichier nofi n'existe pas. Le code de sortie est different de 0 (ici 2), ce qui signale une erreur[cite: 1, 2]


                                                Pipeline


Plus tard

                                                Liste


1.
Le caractere ; permet d'enchainer des commandes sur une meme ligne. Le shell execute les commandes les unes apres les autres, de maniere sequentielle, quel que soit le code de sortie des commandes precedentes[cite: 1, 2]

2.
[user1@salle224-05 TP02]$ ls fi ; echo "$?"
fi
0

3.
[user1@salle224-05 TP02]$ ls nofi ; echo "$?"
ls: cannot access 'nofi': No such file or directory
2

4.
[user1@salle224-05 TP02]$ ls fi && echo "Hello world!" ; echo "$?"
fi
Hello world!
0

5.
[user1@salle224-05 TP02]$ ls nofi && echo "Hello world!" ; echo "$?"
ls: cannot access 'nofi': No such file or directory
2

6.
[user1@salle224-05 TP02]$ ls fi || echo "Hello world!" ; echo "$?"
fi
0

7.
[user1@salle224-05 TP02]$ ls nofi || echo "Hello world!" ; echo "$?"
ls: cannot access 'nofi': No such file or directory
Hello world!
0

8.
[user1@salle224-05 TP02]$ ls nofi || ls fi ; echo "$?"
ls: cannot access 'nofi': No such file or directory
fi
0

9.
[user1@salle224-05 TP02]$ ls fi || ls nofi ; echo "$?"
fi
0

10.
[user1@salle224-05 TP02]$ ls nofi && ls fi ; echo "$?"
ls: cannot access 'nofi': No such file or directory
2

Signification des notations :
- && (ET logique) : la seconde commande n'est executee que si la premiere s'est terminee avec succes (code de sortie 0)[cite: 1, 2]
- || (OU logique) : la seconde commande n'est executee que si la premiere a echoue (code de sortie different de 0)[cite: 1, 2]


II. Redirections des entrees/sorties.


1.
[user1@salle224-05 TP02]$ ls nofi fi
ls: cannot access 'nofi': No such file or directory
fi

2.
[user1@salle224-05 TP02]$ ls nofi fi > output_file
ls: cannot access 'nofi': No such file or directory

3.
[user1@salle224-05 TP02]$ cat output_file
fi

Le fichier output_file contient la sortie de (fi)[cite: 1]. Le message d'erreur pour nofi s'affiche sur le terminal car il est emis sur la sortie des erreurs (descripteur 2) et non redirige par '>' (qui ne redirige que la sortie standard 1)[cite: 1]

4.
[user1@salle224-05 TP02]$ ls nofi > output_file
ls: cannot access 'nofi': No such file or directory

5.
[user1@salle224-05 TP02]$ cat output_file

L'utilisation de '>' ecrase le contenu precedent du fichier[cite: 1]. Comme la commande genere aucun resultat (seulement une erreur sur le terminal), le fichier output_file se retrouve vide[cite: 1]

6.
[user1@salle224-05 TP02]$ ls fifi nofifi > output_file
ls: cannot access 'nofifi': No such file or directory

7.
[user1@salle224-05 TP02]$ cat output_file
fifi

8.
[user1@salle224-05 TP02]$ ls nofi >> output_file
ls: cannot access 'nofi': No such file or directory

9.
[user1@salle224-05 TP02]$ cat output_file
fifi

Contrairement a '>' qui ecrase le fichier, '>>' permet d'ajouter a la fin du fichier sans effacer son contenu existant[cite: 1, 2]. Ici, comme ls nofi ne produit rien sur la sortie standard, le contenu reste inchange[cite: 1]

10.
[user1@salle224-05 TP02]$ ls nofi fi 2> error_file
fi

11.
[user1@salle224-05 TP02]$ cat error_file
ls: cannot access 'nofi': No such file or directory

12.
[user1@salle224-05 TP02]$ ls fi nofifi 2> error_file
fi

13.
[user1@salle224-05 TP02]$ cat error_file
ls: cannot access 'nofifi': No such file or directory

14.
[user1@salle224-05 TP02]$ ls nofi fi 2>> error_file
fi

15.
[user1@salle224-05 TP02]$ cat error_file
ls: cannot access 'nofifi': No such file or directory
ls: cannot access 'nofi': No such file or directory

Les redirections '2>' et '2>>' permettent de rediriger la sortie standard des erreurs (descripteur 2)[cite: 1]
- '2>' ecrase le fichier cible avec les messages d'erreur[cite: 1, 2]
- '2>>' ajoute les messages d'erreur a la fin du fichier sans en effacer le contenu[cite: 1, 2]

16.
[user1@salle224-05 TP02]$ ls nofi fi > output_file 2> error_file

17.
[user1@salle224-05 TP02]$ cat output_file
fi

18.
[user1@salle224-05 TP02]$ cat error_file
ls: cannot access 'nofi': No such file or directory

19.
[user1@salle224-05 TP02]$ ls nofi fi > output_and_error_file 2>&1

20.
[user1@salle224-05 TP02]$ cat output_and_error_file
ls: cannot access 'nofi': No such file or directory
fi

L'interet d'utiliser '2>&1' est de rediriger la sortie d'erreur (descripteur 2) vers la meme destination que la sortie standard (descripteur 1)[cite: 1]
Contrairement a la commande 16 qui separait les resultats dans deux fichiers distincts (output_file et error_file), '2>&1' permet de combiner le flux de resultat et le flux d'erreur dans un seul et meme fichier[cite: 1]

21.
[user1@salle224-05 TP02]$ man wc

NAME
       wc - print newline, word, and byte counts for each file

SYNOPSIS
       wc [OPTION]... [FILE]...

DESCRIPTION
       Print newline, word, and byte counts for each FILE...

La commande wc compte et affiche le nombre de lignes, de mots et d'octets/caracteres contenus dans un fichier ou transmis par l'entree standard[cite: 1]

22.
[user1@salle224-05 TP02]$ wc
ligne 1
ligne 2
CTRL-D
2 4 16

On obtient trois nombres indiquant respectivement le nombre de lignes, de mots et d'octets tapes sur l'entree standard[cite: 1]. CTRL-D signale la fin du flux d'entree (EOF)[cite: 1]

23.
[user1@salle224-05 TP02]$ wc output_and_error_file
2 10 55 output_and_error_file

24.
[user1@salle224-05 TP02]$ wc < output_and_error_file
2 10 55

Difference : 
- Dans le premier cas, le nom du fichier est passe en argument a la commande wc, qui affiche donc le nom du fichier apres les statistiques[cite: 1]
- Dans le second cas, l'entree standard de wc est redirigee a partir du fichier via '<'. La commande lit le contenu depuis son entree standard et n'a pas connaissance du nom du fichier, elle n'affiche donc que les statistiques[cite: 1]

25.
[user1@salle224-05 TP02]$ ls -l /etc/ > output_file

On a liste les details du repertoire /etc/ et redirige le resultat pour l'enregistrer dans le fichier output_file[cite: 1, 2]

26.
[user1@salle224-05 TP02]$ wc < output_file
248 2232 14850

On a compte le nombre de lignes, mots et octets contenus dans le fichier output_file en le redirigeant sur l'entree standard de wc[cite: 1]

27.
[user1@salle224-05 TP02]$ ls -l /etc/ | wc
248 2232 14850





1.
[user1@salle224-05 TP02]$ echo "Hello world1!" | echo "Hello world2!"
Hello world2!

2.
[user1@salle224-05 TP02]$ echo "Hello world1!" | cat
Hello world1!

3.
Signification de la notation | :
Le symbole | (pipe / tube) permet de relier la sortie standard (resultats) de la commande situee a sa gauche a l'entree standard de la commande situee a sa droite[cite: 1]

Explication des resultats :
- Dans le premier cas (echo "Hello world1!" | echo "Hello world2!"), la commande echo de droite ignore l'entree standard qu'elle recoit et affiche simplement son propre argument "Hello world2!"[cite: 1]
- Dans le deuxieme cas (echo "Hello world1!" | cat), la commande cat lit le texte recu sur son entree standard (transmis par le pipe depuis echo "Hello world1!") et l'affiche sur la sortie standard[cite: 1]
