0% ont trouvé ce document utile (0 vote)
74 vues27 pages

Scripting Avancé

Le document décrit les tableaux en bash ainsi que leur syntaxe et utilisation. Il présente également des commandes utiles pour manipuler les variables telles que read, cut, sed.

Transféré par

Ndame
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
74 vues27 pages

Scripting Avancé

Le document décrit les tableaux en bash ainsi que leur syntaxe et utilisation. Il présente également des commandes utiles pour manipuler les variables telles que read, cut, sed.

Transféré par

Ndame
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

SHELL SCRIPTING

Scripting avancé
LES TABLEAUX
Qu'est-ce qu'un tableau ?
• En bash il est possible de créer des tableaux à une
dimension.

• Imaginez un tableau excel pour lequel vous associer à


chaque colonne une valeur différente :

VARIABLE 0
1 2
1 3
2 4
3 5
4
Valeur1
Valeur0 Valeur2
Valeur1 Valeur3
Valeur2 Valeur4
Valeur3 valeur5
valeur4
La syntaxe
• Pour bien comprendre la syntaxe reprenons le tableau
précédent :
VARIABLE 0 1 2 3 4
Valeur0 Valeur1 Valeur2 Valeur3 valeur4

• Pour construire le tableau suivant on a utilisé la syntaxe :


VARIABLE[0]="Valeur0"
VARIABLE[1]="Valeur1"
VARIABLE[2]="Valeur2"
VARIABLE[3]="Valeur3"
VARIABLE[4]="Valeur4"

VARIABLE=(valeur0 valeur1 valeur2 valeur3 valeur4)


Quelques règles
• L'indice que l'on spécifie entre les crochets doit être
obligatoirement positif ou nul.

• Rien ne vous oblige à remplir le tableau pour la valeur "n"


avant de le remplir pour la valeur "n+1"

• En associant une valeur à un numéro, on écrase ce que


contenait potentiellement ce numéro.

• Pour accéder à la valeur de la variable :


VARIABLE=(valeur0 valeur1 valeur2 valeur3 valeur4)

echo ${VARIABLE[1]}
valeur1
Utilisation des wildcards
• On peut remplacer l'indice qui est situé entre crochets par
des wildcards.

• * ou @: Le shell va concaténer tous les éléments du


tableau en une seule chaîne de caractère.
VARIABLE=(valeur0 valeur1 valeur2 valeur3 valeur4)

echo ${VARIABLE[*]}
valeur0 valeur1 valeur2 valeur3 valeur4


COMMANDE READ
Avancée
Utilisation du read pour les tableaux
• Il est tout à fait possible d'utiliser la commande read pour
stocker des valeurs dans un tableau.
read –a NOM_DU_TABLEAU

• Les valeurs séparées par un espace seront stockées


dans l'ordre dans le tableau.
read –a NOM_DU_TABLEAU
valeur0 valeur1 valeur2

echo ${NOM_DU_TABLEAU[0]}
valeur0
Utilisation du read pour les tableaux (2)
• On peut décider d'afficher toutes les valeurs contenues
dans le tableau grâce au caractère * ou @ :

read –a NOM_DU_TABLEAU
valeur0 valeur1 valeur2

echo ${NOM_DU_TABLEAU[*]}
valeur0 valeur1 valeur2

echo ${NOM_DU_TABLEAU[@]}
valeur0 valeur1 valeur2
Et si on ne spécifie pas de variables ?
• Lorsque l'on exécute la commande read, mais qu'on ne
spécifie pas de variables à associer au contenu rentré par
l'utilisateur, la chaîne saisie sera stockée dans une
variable interne appelée $REPLY
read
valeur0

echo $REPLY
valeur0
Mettre une variable en lecture seule
• On peut utiliser la commande readonly pour verrouiller contre
toute modification et suppression la variable spécifiée.

• Une fois qu'elle est verrouillée, seule la mort du processus qui


l'utilise la fera disparaître.
debian:/home/jordan# readonly variable1
debian:/home/jordan# read variable1
Valeur1

bash: var1 : variable en lecture seule

• La commande readonly tapée seule, permet d'afficher toutes


les variables en lecture seule.
ACTIONS AVANCÉES SUR
LES VARIABLES
Supprimer une variable
• La commande unset permet de supprimer la variable à
condition que celle-ci ne soit pas protégée par une
instruction readonly.

• Attention, il ne s'agit pas de supprimer la valeur associée


à la variable, mais bien de supprimer la variable elle-
même (en libérant l'espace mémoire lui étant affecté).
debian:/home/jordan# VARIABLE1="Jordan"
debian:/home/jordan# echo $VARIABLE1
Jordan

debian:/home/jordan# unset VARIABLE1


debian:/home/jordan# echo $VARIABLE1
Utilisation de l'export
• Pour qu'un processus "père" puisse faire connaître une
variable à son processus "fils", il doit l'exporter avec la
commande export.
• Script : script_export.sh
#!/bin/bash
echo "La variable prenom a pour valeur : $PRENOM"

debian:/home/jordan# PRENOM="Jordan"
debian:/home/jordan# ./script_export.sh
La variable prenom a pour valeur

debian:/home/jordan# export PRENOM


debian:/home/jordan# ./script_export.sh
La variable prenom a pour valeur Jordan
Préciser le type de variable
• En Scripting Shell, comme dans la plupart des autres
langages, il est possible de spécifier le type de variable
que l'on déclare grâce à la commande typeset ou
declare

• typeset –a NOM_DE_LA_VARIABLE : tableau


• typeset –i NOM_DE_LA_VARIABLE : entier
• typeset –r NOM_DE_LA_VARIABLE : readonly
• typeset –x NOM_DE_LA_VARIABLE : export
Les variables prédéfinies
• $HOME : Répertoire personnel de l'utilisateur
• $PWD : Répertoire courant
• $LOGNAME : Nom de l'utilisateur
• $PS1 : Prompt principal
• $REPLY : Chaîne saisie par l'utilisateur si la commande
read n'a pas été utilisée avec un argument.
• $RANDOM : nombre aléatoire compris entre 0 et 32767
• $$ : numéro du processus actuel
Utilisation de la commande set et des IFS
• Lorsque des instructions avec la commande set sont
effectuées, le Shell parvient à isoler et stocker les
différentes valeurs dans les variables de positionnement.

• C'est la variable IFS qui contient les caractères devant


être utilisés pour la séparation des différentes valeurs (par
défaut il s'agit de l'espace)
#!/bin/bash
CHAINE="Bonjour:je:suis:Jordan"
IFS=:
set $CHAINE
echo $2

./script.sh
je
Arithmétique sur les variables
• La commande expr réalise ls opérations mathématiques
demandées :
• + : addition
• - : soustraction
• \* : multiplication
• / : division euclidienne
• % : modulo

• Syntaxe :
i=5
j=`expr $i + 4`

echo $j
9
Découper des lignes avec cut
• La commande cut permet de sélectionner un champ ou
un caractère précis dans une ligne. Elle prend différentes
options :
• -f : découpe la ligne suivant le caractère tabulation
• -d : spécifie un autre caractère de séparation
• -s : ignore les lignes ne contenant pas de caractère de séparation

Affichage du début de chaque ligne jusqu'à trouver un ":"


cat /etc/passwd | cut –d: -f1

Affichage des deux premiers champs de chaque ligne en


utilisant : comme délimitateur
cat /etc/passwd | cut –d: -f1-2
LA COMMANDE SED
La commande sed
• Il s'agit d'un éditeur de flux de données, qui permet de
modifier spécifiquement ligne par ligne, des éléments de
la sortie d'une commande.

• Il est possible d'utiliser sed de deux manières :


• Appliquer la commande sed sur le flux d'entrée et récupérer le flux
de sortie.
• Appliquer la commande sed directement sur un fichier passé en
entrée.
La commande sed (2)
• En plus des options et du fameux flux d'entrée, sed utilise
également un script qui contiendra l'ensemble des actions
qu'il devra exécuter.
• Nous pouvons écrire directement le script dans la ligne de
commande grâce à l'option –e (chaque commande est séparée de
la suivante par des ;)
• Nous pouvons passer à la commande sed un fichier contenant le
script en question grâce à l'option -f
Exemple d'un fichier texte.txt

Bonjour je m'appelle Jordan.


Il s'agit de la deuxième ligne du fichier.

On peut y faire figurer des numéros : 3 4 et 5


#On peut également y mettre des commentaires
Faire des lignes avec des caractères du type
root:jordan:assouline

Ligne numéro 8.
Utilisation de sed (suppression)
• Afficher toutes les lignes exceptée la ligne numéro 8 :

sed '8 d' texte.txt

• Afficher toutes les lignes exceptées la ligne 8 et 2 :


sed '2 d; 8 d' texte.txt

• Afficher toutes les lignes exceptées la ligne 1 à 3 :

sed '1,3 d' texte.txt


Utilisation de sed (suppression 2)
• Pour utiliser les regex, il faut encadrer le motif par des /.
• Par exemple pour supprimer toutes les lignes commençant par # :

sed '/^#/ d' texte.txt

• Le ^ signifiant : début de ligne

• On peut aussi utiliser un interval en séparant les deux


motifs par une virgule.
• Par exemple pour supprimer toutes les lignes entre Bonjour et
assouline :

sed '/Bonjour/,/assouline/ d' texte.txt
Utilisation de sed (substitution)
• Pour effectuer une substitution il faut utiliser la syntaxe :

sed 's/element_a_substituer/element_substituant/'

• Substituer ":" par un espace au premier motif rencontré :

sed 's/:/ /'

• Substituer ":" par un espace sur tous les motifs rencontrés :

sed 's/element_a_substituer/element_substituant/g'
Utilisation de sed (Translittération)
• Pour effectuer une translittération il faut utiliser la syntaxe :

sed 'y/liste_a_translitterer/liste_de_translittération/'

• Translittérer les e accentués par des e classiques

sed 'y/éè/ee/'

Vous aimerez peut-être aussi