0% ont trouvé ce document utile (0 vote)
96 vues22 pages

Introduction au Shell Scripting Linux

Transféré par

ismail.boulal.23
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)
96 vues22 pages

Introduction au Shell Scripting Linux

Transféré par

ismail.boulal.23
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

Cours Linux

Programmation—Shell Scripting

Youssef Jabri
[email protected]
École Nationale des Sciences Appliquées

Oujda, Octobre 2023

Jabri Cours Linux


Introduction

Dans ce chapitre, on va voir une introduction à la Programmation


Shell Scripting,
L’objectif est de bien comprendre les scripts SHELL,
Être capable d’écrire des shell scripts simples.

Jabri Cours Linux


Les langages interprétés

Les avantages et inconvénients d’un langage interprété (Perl, Python,


PHP, Ruby, Shell, etc.) sont:
Le code source peut être testé immédiatement: il suffit de le
soumettre à l’interpréteur.
La portabilité sur une machine différente si on a le même
interpréteur.
Le fichier à transporter est un code source de type texte,
généralement petit (quelques kilo-octets).
L’exécution nécessite que l’interpréteur analyse chaque
instruction, et la traduise, c’est plus lent.
Le fichier script (à exécuter) est naturellement lisible et
modifiable par tout utilisateur.

Jabri Cours Linux


Les shell scripts (1)

Un shell script est:


Un fichier texte (on utilisera un éditeur de texte). On a l’habitude
de mettre l’extension .sh au fichier script.
Exécutable par l’OS (quand on lui octroie le droit x sous
Unix/Linux)
interprété par un shell (/bin/bash par exemple)
un script doit commencer par une ligne ”shabang” qui contient les
caractères ’#!’ (les deux premiers caractères du fichier) suivi par le
chemin de l’exécutable de l’interpréteur.
Exemple d’un shell script:
script.sh
#!/bin/bash
echo "je suis un script"

Jabri Cours Linux


Les shell scripts (2)
Avec un script, il est possible :
d’exécuter et/ou grouper des commandes
d’utiliser des variables prédéfinies ($?, ...), des variables
d’environnement ($HOME, $USER, ...), de gérer ses propres
variables
des traitements conditionnels (if, case) et/ou itératifs (while, for)
Au niveau du shell, une commande qui se termine avec un code
de retour (variable interne $?) nul est considérée comme réussie.
Le zéro indique le succès. Un code non-nul indique un échec.

ls
echo $?
0
ls fff
echo $?
2

Jabri Cours Linux


Les Bases

Les commentaires sont introduits par le caractère ’#’.


Pour afficher du texte (sortie standard), on utilise echo ou printf
CHAINE=”world”
echo ”hello $CHAINE”
Pour lire du texte depuis le clavier (périphérique d’entrée), on
utilise read:
# Saisie du nom
echo -n ”Entrez votre nom: ”
read nom
# Affichage du nom
echo ”Votre nom est $nom.”

Jabri Cours Linux


Les variables (1)

Une variable existe dès qu’on lui attribue une valeur.


Une chaîne vide est une valeur valide.
Une fois qu’une variable existe, elle ne peut être détruite qu’en
utilisant la commande interne unset.
Si aucune valeur n’est indiquée, la variable reçoit une chaîne vide.
Le caractère ’$’ permet d’accéder au contenu des variables. Le nom
de la variable peut être encadré par des accolades, pour éviter que les
caractères suivants ne soient considérés comme appartenant au nom
de la variable.

Jabri Cours Linux


Les variables (1)

Pour le shell TOUT est une chaîne de caractères.


Créer une variable:
chaine=bonjour
Afficher une variable :
echo $chaine
echo ${chaine}

Par défaut, les variables sont locales au script shell. Si on veut les
rendre accessible aux autres programmes du shells, il faut les
exporter avec la commande export.

Jabri Cours Linux


Les variables (2)
Les substitutions de de variables sont décrites ci-dessous:
$nom La valeur de la variable.
${nom} Idem.
Obtenir la longueur d’une variable:
PASSWORD=”secret”
echo ${#PASSWORD}

La substitution de commandes permet de remplacer le nom d’une


commande par son résultat d’exécution, cad elle effectue la
substitution en exécutant la commande et en la remplaçant par sa
sortie standard. Il en existe deux formes:
$(commande) ou ‘commande‘

Exemple. Le nombre de fichiers dans le répertoire courant:


NB=$(ls | wc -l)
echo $NB

Jabri Cours Linux


Quoting
Les protections (quoting) permettent de modifier le comportement de
l’interpréteur. Il y a trois mécanismes de protection : le caractère
d’échappement, les apostrophes (quote) et les double-quote:
1 Le caractère \ (backslash) est un caractère d’échappement. Il
préserve la valeur littérale du caractère qui le suit.
2 Encadrer des caractères entre des apostrophes simples (quote)
préserve la valeur littérale de chacun des caractères.
Une apostrophe ne peut pas être placée entre deux apostrophes,
même si elle est précédée d’un backslash.
3 Encadrer des caractères entre double-quotes préserve la valeur
littérale de chacun des caractères sauf $, ‘, et \.
Les caractères $ et ‘ conservent leurs significations spéciales,
même entre guillemets.
Le backslash ne conserve sa signification que lorsqu’il est suivi
par $, ‘, ”, \.
Un double-quote peut être protégé entre deux double-quotes, à
condition de le faire précéder par un backslash.
Jabri Cours Linux
Évaluation Arithmétique
L’évaluation arithmétique permet de remplacer une expression par le
résultat de son évaluation. Le format d’évaluation arithmétique est :
$((expression))

Exemple:
somme=$((2+2))
echo $somme

On pourra utiliser aussi la commande expr:


expr 2 + 3

la commande interne let. La commande let est équivalente à


((expression))

let res=2+3
echo $res

Jabri Cours Linux


Passage de Paramètres à un script
Comme n’importe quel programme, il est possible de passer des
paramètres (arguments) à un script. Les arguments sont séparés par un
espace (ou une tabulation) et sont dans les variables: $0, $1, $2 etc.
Exemple: On a le script exécutable variablesInternes.sh
#!/bin/bash
echo ”Ce sript se nomme : $0”
echo ”Il a reçu $# paramètre(s)”
echo ”Les paramètres sont : $@”
echo
echo ”Le PID du shell est $$”

On l’exécute:
./variablesInternes.sh
Ce sript se nomme : ./variablesInternes.sh
Il a reçu 0 paramètre(s)
Les paramètres sont :
Le PID du shell est 8807
Jabri Cours Linux
Structure de controle if

Une commande spéciale /bin/test existe pour faire les tests


les plus communs:
Comparaison de chaines de caractères.
Comparaisons numériques
Vérifie certaines propriétés sur les Fichiers
Une façon abrégée est la fonction /bin[ (syntaxic sugar)
En général on combine les outils d’Unix aussi pour faire des tests
selon les besoins.

Jabri Cours Linux


Syntaxe If–Then–Else

#!/bin/bash

if [ conditional expression1 ]
then
statement1
...
elif [ conditional expression2 ]
then
statement1
...
else
statement1
...
fi

Jabri Cours Linux


Syntaxe If–Then–Else

#!/bin/bash
# SHELL script: if1.sh nom repertoire
if [ ! -d ”$1” ]
then
mkdir ”$1”
fi

#!/bin/bash
# SHELL script: if2.sh
if test ”$USER”=”guest”
then
echo ”Vous n\’avez pas le mot de passe du compte ensa”
else
echo ”I know you”
fi

Jabri Cours Linux


Syntaxe de test
Tests sur les chaines de caractères
-z string Longueur de la chaine est 0
-n string Longueur de la chaine n’est pas 0
string1 = string2 chaines identiques
string1 != string2 les chaines diffèrent
string chaine non NULL(e)
Tests Numeriques
int1 –eq int2 Premier int est égal au second
–ne, -gt, -ge, -lt, -le greater, greater/equal, less, less/equal
Tests sur les Fichiers
-r Fichier Fichier existe et est readable
-w Fichier Fichier existe et est writable
-f Fichier Fichier regulier
-d Fichier Fichier est un directory
-s Fichier Fichier existe et est non vide
Logic
! Negation du résultat de l’expression
-a, -o operateur ET, operateur OU
( expr ) grouper une expression

Jabri Cours Linux


Syntaxe while
#!/bin/bash
# Syntaxe While
while [ conditional expression ]
do
command
done

#!/bin/sh
a=0
while [ $a -lt 10 ] # this is loop1
do
b=”$a”
while [ $b -ge 0 ] # this is loop2
do
echo -n ”$b ” ; b=‘expr $b - 1‘
done
echo
a=‘expr $a + 1‘
done
Jabri Cours Linux
Syntaxe while

On obtient le résultat suivant:


0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0

Jabri Cours Linux


Syntaxe for
#!/bin/bash
# Syntaxe for
#
for var in list
do
command
done

#!/bin/bash
# fonction Somme d’entiers
sum=0
for var in ”$@”
do
sum=‘ expr $sum + $var ‘
done
echo ”The sum is $sum”

Jabri Cours Linux


Syntaxe Until

#!/bin/bash
# Syntaxe Until
#
until [ expression ]
do
command
done

#!/bin/sh
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=‘expr $a + 1‘
done

Jabri Cours Linux


Syntaxe case–esac

Listing 1: case-esac avec bash


#!/bin/bash
# Syntaxe case-esac
#

case expression in
pattern1)
statements ;;
pattern2)
statements ;;
*)
statements par defaut ;;
esac

* représente toutes les autres options.

Jabri Cours Linux


Syntaxe case–esac
#!/bin/bash
# Exemple case-esac
echo ”Say something.”
while true
do
read INPUT_STRING
case $INPUT_STRING in
hello)
echo ”Hello there.”
;;
bye)
echo ”See you later.”
break ;;
*)
echo ”I’m sorry?”
;;
esac
done
echo ”Take care.”
Jabri Cours Linux

Vous aimerez peut-être aussi