Académique Documents
Professionnel Documents
Culture Documents
Concepts
L'automatisation des tâches fait référence à la délégation/décharge des actions de l'utilisateur aux programmes du système informatique. Un programme effectuera
automatiquement, de lui-même, des actions que l'utilisateur ferait, ce qui lui fera gagner du temps.
Les actions candidates à l'automatisation sont généralement des actions répétitives, peu simples et non interactives. Leur automatisation libérera l'utilisateur de leur exécution
manuelle, répétitive et fastidieuse.
for parcourir la liste des éléments pour appliquer des commandes à chaque élément
$(comm) expansion d'une commande (extension de commande) - remplacement par la sortie de la commande
comm1 | comm2 reliant deux commandes : la sortie de la première commande devient l'entrée de la deuxième commande
$var ou ${var} la valeur de la variable var
${var:2:3} une sous-chaîne de la valeur de la variable var : 3 caractères sont extraits de l'index 2
Scripting
La création de scripts implique l'utilisation d'un langage interprété (appelé langage de script). Cela peut être un langage comme Python, Perl ou Ruby, ou même le shell CLI
(interpréteur de commandes). Les langages de script ont l'avantage de se développer rapidement : nous ajoutons et testons rapidement de nouvelles fonctionnalités.
Les scripts shell ont l'avantage d'utiliser les commandes shell existantes (commandes de fichiers, commandes de processus, commandes de filtrage de texte). Pour les
actions rapides (quick'n'dirty), les scripts shell sont une très bonne solution. Lorsque l'on a des manipulations numériques ou des manipulations de chaînes, les scripts shell
peuvent être insuffisants et il est conseillé de se tourner vers un langage de script plus complet, comme Python, Ruby ou Perl.
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 1/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
Fonctions du shell
Les fonctionnalités du shell sont utilisées dans l'efficacité et l'automatisation de l'exécution des commandes. Je les ai utilisés et je m'en suis souvenu lors des derniers
laboratoires, en particulier le dernier laboratoire. Ces fonctionnalités sont :
redirection des commandes dans les fichiers, à l'aide des opérateurs de redirection : >, <, »
rediriger la sortie d'une commande vers l'entrée d'une autre commande : l'opérateur | (pipe)
variables d'interpréteur de commandes
échapper à l'aide de backslash, de guillemets ou d'apostrophes
Tout au long de ce TP, nous utiliserons des fonctionnalités shell spécifiquement utilisées dans les scripts shell :
expressions régulières
arguments de la ligne de commande
commandes shell internes pour le contrôle de flux : if, for, while
Pour configurer l'exécution d'une séquence de commandes, nous pouvons conditionner l'exécution du script à l'aide de variables ou d'arguments dans la ligne de
commande. Ceux-ci peuvent générer un comportement de script différent en fonction de leurs valeurs.
En fonction de variables, d'arguments de ligne de commande ou de données d'entrée, un script peut prendre des décisions conditionnelles. La vérification d'une condition
peut conduire à un comportement ou à un autre.
Lors de l'exécution d'un script, nous voudrons souvent qu'une action cible plusieurs fichiers, processus ou chaînes. Pour cela, nous verrons comment utiliser des boucles pour
parcourir des listes d'éléments.
Les commandes utilisées peuvent recevoir en argument ou en entrée standard la sortie d'autres commandes. Dans les scripts shell, nous utilisons des fonctionnalités de
chaînage de commandes telles que l'expansion de commandes ou des pipes conduisant à des résultats plus complexes.
Basics
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 2/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
Pour rechercher et sélectionner des lignes dans des fichiers texte, nous utilisons la commande grep, qui à son tour utilise des expressions régulières. Ainsi, si nous voulons
sélectionner les étudiants qui ont la lettre z dans leur nom, nous utilisons la commande
Il est recommandé que l'argument d'expression régulière passé à la commande grep soit entouré de guillemets simples (') pour être échappé. De cette façon, les caractères
de l'expression régulière seront transmis exactement à la commande grep et ne seront pas interprétés par le shell.
Ainsi, la commande grep pour extraire les étudiants dont le nom commence par la lettre F est
tr & sed
L'utilitaire tr permet la traduction, la suppression et la manipulation des caractères reçus en entrée. Fondamentalement, sed est un éditeur de flux qui peut effectuer des
transformations au niveau de la chaîne sur un texte reçu en entrée. De plus, sed peut accepter des expressions régulières comme argument de recherche.
La différence entre tr et sed est que le premier effectue des transformations au niveau des caractères, tandis que le second effectue des transformations au niveau des
chaînes. Pour cette raison, nous pouvons dire que sed est un tr, tr++ plus avancé :).
Par exemple, en utilisant à la fois tr et sed, remplaçons le caractère ',' par TAB dans student.csv :
cut
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 3/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
Nous pouvons extraire des informations structurées sur les lignes et les colonnes à l'aide de l'utilitaire cut:
Si nous voulons trier les élèves du fichier dans l'ordre de leurs noms, nous utiliserons la commande sort :
-t spécifie le séparateur
-k spécifie l'index, ou la clé, de la colonne par laquelle nous voulons trier les entrées
n tri numérique (la valeur par défaut est alphabétique)
-r tri inversé (ascendant par défaut)
Nous voulons faire un tri numérique décroissant par année, suivi d'un tri alphabétique par groupe (c'est-à-dire toutes les années commençant par 10 mais triées par ordre de
groupe). Ainsi, pour trier les entrées dans l'ordre des notes, nous utiliserons le séparateur , (virgule, virgule) et la 3ème colonne pour la clé :
S'il y a des lignes en double, nous pouvons utiliser l'utilitaire uniq en conjonction avec sort pour les supprimer. Pour cela, nous ajoutons une ligne dupliquée dans
Students.csv :
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 4/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
Shell scripting
Un script shell est un fichier texte qui contient des commandes et des constructions spécifiques au shell. Un script shell commence par la construction #!/bin/bash,
appelée un shebang qui indique l'interpréteur du script ; dans ce cas, l'interpréteur est le shell Bash lui-même. Si aucun shell n'est spécifié via shebang, le shell par défaut
(défini dans /etc/passwd) attribué à l'utilisateur connecté sera pris par défaut.
Par exemple, les one-liners que j'ai écrits jusqu'à présent pourraient être mis dans un script shell et, de plus, s'il s'agit de longues commandes et qu'elles ne tiennent pas sur
une seule ligne, nous pouvons les “casser” en plusieurs lignes en utilisant le séparateur \ :
#!/bin/bash
ATTENTION! Dans la construction ci-dessus après \ il ne doit plus y avoir de caractères (pas même d'espaces à la fin)
Le script contient des commandes courantes utilisées dans le shell et d'autres commandes que l'on trouve plus souvent dans les scripts : while, if, for. Ce ne sont
pas des instructions, ce sont toujours des commandes shell ; peut également être utilisé, si la syntaxe est correcte, sur la ligne de commande.
#!/bin/bash
echo $HOME
En plus de ces variables, le script peut recevoir un certain nombre d'arguments de ligne de commande. En utilisant les variables suivantes, nous pouvons faire référence aux
arguments reçus par le script depuis la ligne de commande :
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 5/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
third argument: caise
the list of arguments: banane cirese caise castraveti
#!/bin/bash
IFS=','
while read name group final_grade test_grade practical_grade; do
echo "$name"
done < students.csv
Pour l'analyse dans le shell, nous utilisons la construction while read …. La construction est suivie des noms des variables dans lesquelles nous retiendrons les champs
analysés à l'intérieur de chaque ligne. Nous utilisons le fichier Students.csv dans le répertoire parent comme entrée ; est un fichier au format CSV (Comma Separated
Values) utilisant le caractère virgule (,, virgule) comme séparateur. Pour extraire uniquement les noms des étudiants du fichier d'entrée, nous allons exécuter le script
extract-name :
student@uso:~/uso-lab/labs/06-scripting/support/00-basics$ ./extract-name
VLĂDUȚU I. Liviu-Alexandru
GEORGIU V. Alexandra-Maria
PĂUNOIU N. Gabriel
BĂCÎRCEA A. Andrei
[...]
Étant donné que le format d'entrée utilise une virgule (,, virgule) comme séparateur, nous avons défini la variable interne IFS (Internal Field Separator) dans le script à la
valeur ',', comme nous le voyons à la ligne 3 du script extract-name :
IFS=','
if statement
Nous pouvons étendre le script ci-dessus pour afficher uniquement les étudiants dont la moyenne est supérieure à 5.
#!/bin/bash
IFS=','
while read name group final_grade test_grade practical_grade; do
if test "$final_grade" -gt 5; then
echo "$name,$group,$final_grade"
fi
done < students.csv
for loop
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 6/8
6/9/23, 5:36 PM TP 05 - Automatisation en ligne de commande [CS Open CourseWare]
Il existe également des constructions de type for dans bash. Un exemple courant consiste à parcourir le contenu d'un répertoire et à effectuer des opérations sur les fichiers.
Par exemple, nous souhaitons sauvegarder tous les fichiers d'un répertoire envoyé en paramètre au script :
#!/bin/bash
#!/bin/bash
Exercices
01. Alias
Dans cet ensemble d'exercices/tutoriels, nous verrons comment utiliser les alias pour rendre les actions plus efficaces.
xdg-open .
xdg-open http://google.com
<code>
Pour effectuer des actions plus rapidement, nous utilisons un alias. Nous créons des alias open et go pour xdg-open comme ci-dessous :
<code bash>
alias open='xdg-open'
alias go='xdg-open'
Exercice : Utilisez maintenant la commande open ou la commande go pour les deux actions ci-dessus. Nous avons simplifié la commande xdg-open (plus difficile à écrire et
plus difficile à retenir).
A la fin de l'exécution de ces commandes, on obtient 3 fichiers texte (pour les 3 papiers/tests) et 13 répertoires, pour les 13 répertoires. J'ai utilisé for pour parcourir une liste
et seq pour créer une liste numérique.
Exercice : Créez une doublure qui crée les 13 répertoires et crée dans chaque répertoire un sous-répertoire appelé slides/, un fichier appelé notes.txt et un fichier appelé
resources.txt.
Créez des scripts disable-usb et enable-usb pour désactiver et activer le montage de la clé USB, respectivement. Exécutez-les pour vérification.
Exercice : Créez un script appelé system-info qui affiche les informations système dans le modèle ci-dessous :
date: 2019-11-05
kernel: 5.0.0-32-generic
version: Ubuntu 18.04.3 LTS
num_processes: 336
https://ocw.cs.pub.ro/courses/sde2/laboratoare/05_uso 8/8