Cette fiche reprend les notions vues lors du CTP n°3. Vous retrouverez synthétisées sur cette page les différentes commandes utilisées, leur intérêt et comment nous avons pu les utiliser lors des manipulations sur ordinateur.

Table des matières

1. Variables du Shell

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Définition et utilisation

Une variable est un nom qui est associé à une valeur. En shell, les variables sont des chaînes de caractères. Le développement d’une variable est le remplacement du nom de la variable par sa valeur.

Par exemple, la variable PS1 est la variable qui contient le prompt du shell. Lors des TP précédents, quand vous tapiez la commande PS1='$ ', vous avez affecté la chaîne $<space> à la variable PS1. Lorsque le shell affiche le prompt, il développe la variable PS1 et affiche la chaîne $<space>.

Les variables du shell sont des variables d’environnement. Elles sont accessibles à tous les processus lancés par le shell. On peut les lister avec la commande env ou printenv. On peut également les lister avec la commande set qui liste également les variables internes du shell (voir la page de manuel de set pour plus de détails).

</aside>

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Variables et commande echo

Pour créer une variables, on utilise la syntaxe suivante :

$ nom_variable=<contenu de la variable>

On peut créer plusieurs variables dans une même ligne de commande en séparant chaque variable créée par un espace.

<aside> <img src="/icons/report_red.svg" alt="/icons/report_red.svg" width="40px" /> Attention !

Si l’on met un espace avant ou après le symbole = (ex : variable =var.c ou variable= var.c) dans la création d’une variable, alors le Shell nous renvoie une erreur (command not found).

</aside>

La commande echo permet d’afficher quelque chose mis en argument dans le Shell. Le $ permet de référer à la variable dont le nom est indiqué après ce symbole, ce qui a pour effet avec la commande echo d’afficher son contenu.

Si la variable mise en argument n’existe pas, alors cela affiche une ligne vide (pas d’erreur) dans le Shell.

On peut intégrer des variables à l’intérieur de nouvelles variables créées, pour cela on utilise le symbole $ en le plaçant avant le nom de la variable que l’on souhaite intégrer. Il faut les définir avant la variable qui les intègre, de plus si l’on modifie les valeurs des variables intégrées alors ça ne change pas le contenu original de la variable qui les contient.

<aside> <img src="/icons/compose_green.svg" alt="/icons/compose_green.svg" width="40px" /> Exemple

$ sujet=Alice verbe=aime cod=piscine # Création de 3 variables
$ phrase="$sujet $verbe la $cod." # Création d'une variable intégrant les 3 autres créées
$ echo $phrase
Alice aime la piscine.
$ sujet=Bob verbe=mange cod=salade # Modification des 3 premières variables créées
$ echo $phrase
Alice aime la piscine. # La variable `phrase` n'a pas été modifiée
$ echo "$sujet $verbe la $cod." 
Bob mange la salade. # Cette fois les valeurs modifiées sont affichées

</aside>

</aside>

2. Caractères spéciaux et inhibitions

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Caractères spéciaux du Shell

Certains caractères ont une signification particulière pour le shell : on dit qu’ils sont spéciaux. À l’inverse, on dit d’un caractère qui n’a pas d’autre signification que lui-même, qu’il a son sens littéral. Nous listons ci-dessous les caractères spéciaux ; la plupart d’entre eux seront vus en détail plus tard dans le cours.

Enfin, les caractères suivants ont une signification particulière dans certains contextes et doivent donc parfois être inhibés:

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Contre-oblique (\\)

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Apostrophe (')

</aside>

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Guillemets anglais (")

</aside>

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Pourquoi plusieurs méthodes d’inhibition ?

Les mécanismes d'inhibition multiples offrent une flexibilité d'utilisation. Chaque mécanisme a un rôle spécifique :

  1. Les guillemets simples (' ') sont utiles lorsque l’on veut que tout soit interprété littéralement, sans exceptions.
  2. Les guillemets doubles (" ") sont plus flexibles et permettent l'expansion de variables et l'exécution de commandes.
  3. Le caractère \\ permet d'échapper sélectivement des caractères spéciaux à l'intérieur des guillemets doubles, ce qui est utile lorsque l’on a besoin d'inclure des caractères spéciaux littéralement dans une chaîne. </aside>

3. Extensions de chemins

<aside> <img src="/icons/comment_blue.svg" alt="/icons/comment_blue.svg" width="40px" /> Extensions de chemins

Lorsqu’on saisit un chemin contenant des wildcards ou caractères joker, le shell le développe en remplaçant les caractères spéciaux *? et [ par les noms des fichiers qui correspondent à l’expression régulière qui résulte de l’extension du chemin. On appelle ce mécanisme l’extension de chemin.

Par exemple, si le répertoire courant contient les fichiers abcd et e, alors le chemin a* est développé en a, le chemin ? en a b c d e et le chemin [a-c] en a b c.

L’extension de chemin est effectuée par le shell, avant que la commande ne soit exécutée. Si aucun fichier ne correspond à l’expression régulière, le shell laisse le chemin tel quel.

</aside>

<aside> <img src="/icons/compose_green.svg" alt="/icons/compose_green.svg" width="40px" /> Déplacer plusieurs fichiers avec une caractéristique commune

</aside>