Académique Documents
Professionnel Documents
Culture Documents
1 - Concepts de base
● Structure Linux:
- multi-tâches
- multi-utilisateurs
- multipostes
- Outils logiciels gratuits / libre
- Environnement de développement
● Structure du système Linux :
- Kernel = Noyau :
Gestion des Entrées/Sorties, Ordonnancement des tâches ,Gestion de
la mémoire virtuelle
- Shell : Interprétation des commandes utilisateur
- Application:bibliothèques entre applications
● Séquence de démarrage:
- Démarrage de l’ordinateur ou amorçage
- Exécution du chargeur de démarrage
- Démarrage du noyau
- Lancement du processus init
- Lancement des scripts de démarrage
LINX SGF :
types de fichiers:
● “-” les fichiers ordinaires (ordinary files)
● “d” les répertoires (directories)
● Les fichiers spéciaux (special files ou devices)
-Une fois que nous avons modifié notre fichier .bash_profile et sauvegardé
les modifications, nous devons recharger les configurations Bash en
exécutant la commande: source ~/.bash_profile
Exemples:
# nano ~/.bash_profile
Prompt coloré :
Noir : 30
Rouge : 31
Vert : 32
Jaune : 33
Bleu : 34
Magenta : 35
Cyan : 36
Blanc : 37
Gras : \033[1m
Souligné : \033[4m
Clignotant : \033[5m
⇒ exemples :
PS1='${debian_chroot:+($debian_chroot)}(\!)\[\033[01;32m\]\u@\h\[\033[00m\
]:\[\033[01;34m\]\w\[\03 3[00m\]\$\n '
-/etc/shells : fichier qui contient une liste de tous les Shells disponibles
-Le Shell utilisé peut être connu par la commande ps qui liste les processus
utilisateurs , voici la sortie de la commande ps :
Environnement du bash
*Les fichiers pour une configuration globale qui affecte les environnements de
tous les utilisateurs.( /etc/profile et /etc/bashrc (/etc/bash.bashrc)
-sont lus que par les login Shells juste après la connexion
· ~/.bash_logout
2. Shell sans connexion (non login shell) : sans login et mot de passe
-elles sont dynamiques utilisées par les différents processus d’un système
d’exploitation
Commandes Shell
Utiliser l’aide
-Aide en ligne: la commande man : qui permet de consulter les pages de manuel de
linux
-Aide interne : est utilisée à travers les options -h et --help
Types de cmds
ls
ls –l
cd/pwd
mkdir/ rmdir
touch
rm
mv
cp
chmod
Umask
Cat
more, less
● Rappel sur les principales commandes:
sed : Éditeur de flux de texte, qui permet de transformer des fichiers texte(en
utilisant des commandes de substitution et de recherche et remplacement).
2 - Les redirections
1) Redirection de la sortie standard :
$ echo "Hello Everybody" > fichier1 :
⇒ La différence entre > et >> c’est que lorsqu' on utilise ‘>’ on supprime le contenu
du fichier et on le remplace par « hello everybody » par contre lorsqu’on utilise ‘>>’
on ajoute sur le contenu du fichier bonjour tout le monde.
La sortie d'erreur :mkdir :impossible de créer le répertoire est envoyée dans le fichier
donné en argument :fichier.err
4) Joindre les deux sorties standards :
$ cat fichier1 > copie_fichier2 2>&1 :
$ cat fichier_inexistant > fichier2 :
⇒ xargs reads the input from the pipe and converts it into arguments for the mkdir
command.
3 - Commandes Linux
1- Commandes de gestion d’arborescence de fichiers
*syntaxe d’une commande
*Fichiers
ls –l :Le premier caractère de chaque ligne renvoyé par cette commande correspond
au type du fichier
on distingue plusieurs types de fichier:
‘-’: les fichiers ordinaires (ordinary files)
d : les répertoires (directories)
Les fichiers spéciaux (special files ou devices).
l :lien symbolique
p :pipe nommé
s :socket
c :périphérique en mode caractère (clavier)
b :périphérique en mode bloc(disque)
*Nomenclature fichier
Dans Unix/Linux on fait la distinction entre minuscules et majuscules.
Le nom peut contenir le caractère de soulignement "_", le point ".", ou le signe "+".
Exemples de noms de fichier valide:
Budget2000 /Budget2000 /budget.2000 /budget.avril.200 /avril2000+juin2000
*Méta-caractères d’expansion
*Les répertoires . et ..
Tout répertoire contient deux répertoires particuliers qui ont pour noms . et . .
.:représente le répertoire de travail (répertoire courant),
. .:représente le répertoire parent du répertoire courant.
Pour remonter dans le répertoire parent : cd . .
~ :représente le répertoire d’accueil de l’utilisateur courant.
La commande ls:
ls: Lister le nom des fichiers du répertoire courant : ls (pour list)
-l : format détaillé
-a : liste aussi les noms de fichiers qui commencent par un "." (qui ne sont pas
normalement listés)
-A : comme l'option -a mais les répertoires "." et ".." ne sont pas affichés
-d : si l'argument est un répertoire, liste seulement son nom (et pas les fichiers qui
sont sous ce répertoire)
-t : trie par date de dernière modification (sinon la liste des fichiers est triée par
défaut par ordre alphabétique), les plus récemment modifiés en premier
-i : affiche au début de la ligne le numéro de i-node des fichiers ¤
-R : listage récursif des sous-répertoires
-g : affiche le groupe du fichier quand elle est associée à l'option "-l"
-Nom du fichier :
- cd :permet de Se déplacer dans les répertoires : cd (change directory)
*cd sans arguments retourne dans le répertoire principal (identique à cd ~)
*cd rep pour aller dans le sous répertoire rep
*cd .. Pour remonter dans le répertoire père
-pwd: savoir où on est (print working directory)
-mkdir:créer un répertoire
-rmdir:supprimer un répertoire s’il est vide
-rm -R:supprimer un répertoire non vide
-touch:créer un fichier
touch file1 file2 : crée les 2 fichiers
-cat:consulter un fichier texte (si le texte est court) de même pour (vi, emacs, gedit,
vim)
-less:visualiser un fichier texte page par page et permet de revenir en arrière ou de
rechercher une chaîne.
-more:visualiser un fichier texte page par page
more +20 mypass (permet d’afficher à partir de la ligne 20)
-cp: copier fichiers et répertoires
cp [option] source destination (copie d'un seul fichier, en précisant le chemin
et le nom du fichier destination)
cp [option] rep-source rep-cible (copie l'ensemble des fichiers dans le rép.
spécifié, en gardant les noms)
les options possibles pour la commandes cp:
-rm: remove, supprimer des fichiers
rm [option] fichiers
les options possibles pour la commandes rm :
-mv:déplacer ou renommer
2- Gestion des droits d’accès : Utilisateurs, Groupes, Permissions
*Exemples de commande
-/etc/passwd : un fichier contenant les informations relatives aux utilisateurs
-cat /etc/passwd | grep tichit: permet de rechercher un utilisateur nommé "tichit"
dans le fichier "/etc/passwd".
La commande "grep" est utilisée pour rechercher un motif spécifique (dans ce cas,
"tichit") dans un fichier ou une sortie donnée. La sortie de cette commande sera
toutes les lignes du fichier "/etc/passwd" qui contiennent la chaîne "tichit".
*Note:
Sur les distributions Linux récentes, le compte root est parfois désactivé.
Dans ce cas, on se servira de la commande sudo [login] commande, au cas par cas
qui permet de devenir temporairement root ( ou l’utilisateur login ) pour exécuter la
commande.
*Droits d’accès:
Il existe 3 manières pour accéder à un fichier:
¤ Lire son contenu (read)
¤ Modifier son contenu (write)
¤ S’il s’agit d’un fichier ou d’un script, l’exécuter (execute)
3 catégories ou groupements d’accès à un fichier
Exemple
644 : rw-r–r–
755 : rwxr-xr-x
000 : ---------
711 : rwx–x–x
2) De manière relatives ou symbolique ( en modifiant les permissions courantes)
Les filtres :
-commande head :
⇒ Exemple :
wc fichier.txt
15 109 503 fichier.txt → 15 est le nombre de lignes, 109 est le nombre de
mots et 503 est le nombre de caractères.
Exemple :
La commande sort : Effectuer des tri sue les lignes d’un flux donné en
paramètre
options :
-n tri numérique : $ sort -n filename.txt
- nr tri numérique inversé : $ sort -nr filename.txt
-d dictionnaire
-k colonne : k introduit le numéro de colonne de tri: exemple “-k 2” désigne la
seconde colonne : $ sort -k2n filename.txt
-t tabulation
-r tri inversé : $ sort -r inputfile.txt
-c option : This option is used to check if the file given is already sorted or not
-u option : To sort and remove duplicates
-M Option : To sort by month pass the -M option to sort.
-o redirection de la sortie vers un autre fichier
Exemple :
$cat file1.txt | tr “[A-Z]” “[a-z]” > file2.txt
*Si le caractère "~" est immédiatement suivi d'un mot, ce dernier est
considéré comme un nom d'utilisateur. Copier le fichier "fichier3" du
répertoire /home/toto vers le répertoire /home/titi
Expansion d'accolades
*Avant que le shell (Bash) n’exécute une commande il vérifie s’il doit
effectuer des substitutions sur la commande:
-Les noms de variables sont remplacés par leurs valeurs
-les alias sont remplacés par les commandes pour lesquelles ils sont raccourcis et
toute expansion est effectuée.
*L’expansion d’accolades est une technique utile pour générer des listes
de chaînes qui peuvent être utilisées dans des scripts et des alias et sur
la ligne de commande Linux.( disponible dans les shells modernes
(bash) , mais elle peut manquer dans certains anciens shells.)
Extensions simples
* Une expansion d’accolade est contenue entre une paire d’accolades { }.
*Il peut s’agir d’une liste d’éléments séparés par des (,) ou d’un spécificateur de
plage.
*Les espaces ne sont pas autorisés à l’intérieur des accolades, sauf si la chaîne
entre guillemets « " »
*Pour une liste séparée par des virgules, le processus d’expansion prend chaque
élément à son tour et le transmet à la commande appelante.
* Les virgules sont ignorées.
*Une liste peut être composée de mots ou de chiffres.
* L’ordre des éléments de la liste est complètement arbitraire.
-Une plage d’extension a un caractère de début et un caractère de fin liés par deux
points .. Sans aucun espace.
-Tous les éléments de liste manquants sont fournis automatiquement par l’expansion
afin que la plage entière du caractère de début au caractère de fin soit créée.
-Il est possible d’utiliser l’expansion d’accolades avec des plages dans des boucles
dans les scripts :
for i in {3..7}
do
echo $i
done
for i in {m..q}
do
echo $i
done
En ligne de commande :
Préambule et Postscript
-Vous pouvez placer du texte avant et après une expansion entre accolades pour
que ce texte soit inclus dans les résultats de l’expansion.
- Le texte placé devant une extension s’appelle le préambule, tandis que le texte
placé derrière une extension d’accolades s’appelle le post-scriptum.
Commandes Exemples
-touch file-{1..4}.txt : creation des fichiers file-1.txt,file-2.txt,file-3.txt,file-4.txt
- zip source-code program{.c,.h,.css} : créer une archive zip compressé «
source-code.zip »de tous les fichiers dans le répértoire courant qui correspondent
aux motifs spécifiés (.c,.h,.css).
-cp brace/new/prog-1.c{,.bak} :
-diff brace/{new,old}/prog-1.c :
-mkdir -p {source,build,man,help{/pages,/yelp,/images}} :
-wget https://www.URL-of-yourchoice.com/test{1,2}/picture{001,002}.jpg :
-Cela fonctionne avec * mais ne fonctionne pas avec les accolades car l'expansion
de { } ne se fait pas dans le cadre d'une assignation de variable :
-Il est possible de contourner cette limitation. On utilise alors les parenthèses, qui
permettent de forcer l'expansion des accolades, et qui transforment MaListe en
tableau :
Extraits du TP5
1) extraire du fichier.txt les colonnes 3 et 7
$ cut -f 3,7 fichier.txt
2) retrouver des lignes commencant par ab
$ cat fichier.txt | grep^[ab]
3) retrouver chaîne finissant par nologin
$ cat fichier.txt | grep nologin$
4) chaîne s contenant au moins un chiffre
$ cat fichier.txt | grep [0-9]
5) chaîne finissant par un point d'exclamation
$ cat fichier.txt | grep \!$
6) chaîne ne finissant pas par un signe de ponctuation
$ cat fichier.txt | grep ‘[^,;:?\!]\s*$’
7) chaîne dont la seconde lettre est un «r»
$ cat fichier.txt | grep ^.r
8) chaîne commençant par un point
$ cat fichier.txt | grep ^[\.]
9) chaîne ne commençant pas par un chiffre
$ cat fichier.txt | grep ^[^0-9]
10) chaîne contenant un nombre d’au moins trois chiffres et au plus 5 chiffres
$ cat fichier.txt | grep ‘[0-9]\w\{2,4\}’
11) chaîne commençant par une majuscule et se terminant par un point
$ cat fichier.txt | grep ^[A-Z]*\.$
12)chaîne qui se répète deux fois
$ cat fichier.txt | grep ‘./+ /2’
13)Afficher les lignes commençant par des noms de login ne contenant pas de
chiffre
$ cat fichier.txt | grep ‘^[^0-9]\+’
14) Afficher les lignes dont le nom de login commence par la chaine« user»
$ cat fichier.txt | grep ‘^user’
15) Afficher les lignes commençant par des noms de login ne se terminant pas
par un chiffre
$ cat fichier.txt | grep ‘^[^0-9].*[^0-9]$’
16) Afficher les lignes du fichier commençant par des noms de login de 3 ou 4
caractères
$ cat fichier.txt | grep ‘^\w\{3,4\}’
17)Afficher uniquement les champs contenant le login et le home directory
$ cut -d: -f1,6 fichier.txt
18) Extraire les noms de login et UID, redirigerez le tout vers un fichier pw1.
$ cut -d: -f1,3 fichier.txt > pw1
19) Extraire les noms de login, triez dans l’ordre alphabétique inversée et
redirigerez le tout vers un fichier pw2.
$ cut -d: -f1,3 fichier.txt | sort -r > pw2
20) Rediriger dans un fichier « utilisateurs » les noms de login des 10 derniers
utilisateurs à la fin du fichier pw2
$ tail -n 10 pw2 > utilisateur
21) afficher le code ascii de chaque caractère
nano ASCII
22) Ecrire la commande permettant à partir du fichier ASCII et du code ascii
d’afficher le caractère correspondant
$ awk ‘ {printf “%c” , $1}’ ASCII
23) afficher les fichiers du répertoire courant d’extension ‘.txt’
$ ls -l | grep '^-.*\.txt$'
24) extraire les noms des utilisateurs du fichier /etc/passwd grace à la
commande cut et ne garde que les noms commençant par la lettre "A" avec la
commande grep. La sortie de cette commande sera rediriger vers le fichier
“sortie”.
$ cat /etc/passwd | cut -d: -f1 | grep "^A" > sortie
25) commande qui affiche le nombre de fichier caché dans le répertoire courant.
$ ls -a | grep '^\.' | wc -l
l'identifiant de l'utilisateur pour le compte duquel il s'exécute (UID), qui détermine les droits
du processus
· UID : le propriétaire
· STAT l’état
-Linux est un OS préemptif : A tout moment, il peut lancer ou arrêter n’importe quelle
application
· ps –A ou ps –e Processus en exécution
· ps –r processus running
· ps –x processus de l’utilisateur
· ps –g groupe
Modes de lancement d’un programme :
· bg %job-id
Une commande qui s’exécute avec succès rend un retour à 0. Exemple : true ; echo$? (true
rend toujours ce code de retour)
Ordre d’exécution et parenthèses: ̈ “Le connecteur pipe (|) “ a la priorité sur les connecteurs
d'enchaînement
Exemple:
Divers:
Commande « exec »: exec [command [arguments ...]] Remplace le Shell avec la commande
donnée.
$ date ; ls>resultat
$ catresultat
FIC
fichier
̈*Dans le cas des parenthèses, les commandes sont exécutées à partir d’un shell enfant,
¤ Avec les parenthèses, un shell enfant est systématiquement créé etc’est ce dernier qui traite
la ligne de commande (avec duplications ultérieures si nécessaire).
$ catresultat
FIC
Fichier
* dans le cas des “{ }” les commandes sont lancées à partir du shell courant.
* Cela a pour effet de préserver les modifications apportées par la suite de commandes sur
l’environnement du processus courant.
/bin
$ pwd
Substitution de commandes;
* La sortie des commandes peut être utilisée comme Argument d'une autre commande
Syntaxe:
Sous-shells :
* Une commande externe dans un script lance un sous-processus alors qu'une commande
interne bash ne le fait pas.
* les commandes intégrées/internes s'exécutent plus rapidement que les commandes externes.
* Les variables utilisées dans un sous shell ne sont pas visibles en dehors .
Elles ne sont pas utilisables par le processus parent, le shell qui a lancé le sous-shell.
(Variables locales);
* Une liste de commandes placées entre parenthèses est exécutée sous forme de sous-shells
*Une commande cd effectuée au sein d'un sous-shell n'a d'impacte que sur celui-ci.
* Il est possible d’exécuter deux sous shells en parallèle en les séparant par un'&' (sans retour
à la ligne) Ou bien en les lançant tous les deux en arrière plan.
Alias :
* Les Alias sont des raccourcis vers des lignes de commandes fréquemment utilisées.
$ alias mkdp=’mkdir
̈ Les alias et les fonctions ainsi définis ne sont pas conservés d'une session à l'autre.
̈Pour qu’ils soient initialisés à chaque ouverture du Shell Bash, on peut les définir :
· Dans le fichier /etc/bashrc : dans ce cas, ils seront définis dans toutes les sessions de tous
les utilisateurs
1/ Utiliser la commande ps pour obtenir une liste des processus en cours d'exécution ainsi que
le nomd'utilisateur ayant lancé l’exécution de chacun d’entre eux.
- Puis conduire la sortie vers grep pour n'obtenir que la sortie desprocessus appartenant à
l’utilisateur root.
Indication : Le symbole ^indique à grep de ne chercher que la chaîne root au début de chaque
ligne.
2/ Imaginer qu'il faut passer ces données à un autre programme ou script qui n'a besoin que
des noms des processus.
Utiliser une combinaison des commandes tr et cut pour produire cette liste.
Indication : tr sera utilisée pour transformer les espaces blancs en un séparateur de champs
pouvant être compris par cut(un % dans ce cas) et, cut est utilisé pour afficher uniquement les
noms de processus(champ11 de la sortie de la commande tr).
$ psauwx | grep ^root | tr -s [:blank:] [%] | cut -d% -f11
3/ la commande ps peut produire une sortie sous différents formats, en particulier elle permet
d’afficher directement la liste des processus exécutés en tant que root sur le système.
Structure du script :
Exécution :
Les instructions par ligne sont possibles séparées par un point-virgule
; : saut de ligne
Exemple:
if [ $# -eq 0];then
ou bien
if [$# -eq ]
then
Les instructions sont liées logiquement par ( && ) et ( || ).
Exemple:
Remarque: vous devez utiliser Apostrophes et non Guillemet si vous voulez utiliser
la deuxième méthode
Exemple :
-Dans cet exemple, la longueur maximale du login ne peut dépasser 5 caractères.
Exemple:
Exemple:
les variables
-Il n'est pas nécessaire d'utiliser des déclarations ou des types spécifiques, car toute
valeur est considérée comme une chaîne de caractères.
-Il existe trois types de variables : les variables définies par l'utilisateur, les variables
définies par le système (variables d'environnement) et les variables spéciales
-Les noms de variables doivent respecter certaines règles, comme commencer par
une lettre et être composés de lettres, de chiffres et de caractères de soulignement.
-Les noms des variables définies par l'utilisateur sont souvent en minuscules pour
les distinguer des variables système.
-Une variable est déclarée dès qu'une valeur lui est affectée à l'aide du signe "="
-La valeur peut être une chaîne de caractères ou une valeur numérique.
-Pour accéder à une variable, on utilise le caractère "$" devant le nom. Lorsque le
Shell rencontre le "$", il interprète le mot suivant comme étant une variable.
-Si la variable existe, alors "$nom_variable" est remplacé par son contenu, ou par un
texte vide dans le cas contraire.
-Une variable peut contenir des caractères spéciaux notamment des espaces. Il faut
dans ce cas soit verrouiller les caractères spéciaux un par un, soit de les mettre
entre guillemets ou apostrophes
-Il ne sont définies et disponibles que pour l'instance de bash où elles ont été créées
et ne sont pas accessibles par d'autres programmes.
Variables d’environnement :
-Il sont accessibles par tous les programmes dans le même environnement
utilisateur et sont en majuscules par convention
-Pour rendre une variable locale visible par les scripts et autres sous-shells, elle doit
être exportée avec la commande "export variable".
-Les variables exportées peuvent être modifiées dans le script, mais ces
modifications ne s'appliquent qu'au script ou au sous-shell en question.
-L’argument de la commande export est bien la référence (le nom) de la variable Pas
sa valeur ( Ne pas utiliser le caractère $)
PS1 invite principalement Shell en mode interpréteur, Variable contenant une chaîne
de texte réalisant la mise en forme du message d’attente (prompt) en ligne de
commandes. Par exemple [\u@\h \W]\$.
Shell en cours
- pour déclarer et exporter une variable en une seule commande, la syntaxe est la
suivante :
La commande printenv: permet d’afficher les noms et les valeurs de toutes les
variables d’environnement.
remarques:
-Le contenu de ces variables Système/Environnement peut être modifié mais il faut
alors faire attention car certaines ont une incidence directe sur le comportement du
système
La commande expr:
Les arguments de la commande expr doivent toujours être séparés par au moins un
espace ou une tabulation.
Exemple:
Lorsqu’on ne met pas d'espace,ça sera interprété comme une chaîne de caractère.
Exemple:
+ Addition
- Soustraction
/ Division
* Multiplication
** Puissance
% reste de la division
Exemple:
Pour faire des calculs complexes,on utilise l’outil bc qui supporte des nombres de
précision arbitraire.
Exemple:
· Affectation arithmétique
+= : incrémentation exemple : a +=2 càd a=a+2
· Opérateurs binaires
& : ET binaire
| : OU (inclusif) binaire
~ : NON binaire
- Extraction de sous-chaînes :
- Remplacement de sous-chaîne :
· La commande test :
Définition : La commande test est une commande shell utilisée pour effectuer des
tests conditionnels. Elle permet de vérifier si une condition est vraie ou fausse et
renvoie une valeur de sortie en conséquence.
test condition
[ condition ]
Affichage :
f1 -nt f2 Vrai si les deux fichiers existent et si f1 est plus récent que f2
f1 -ot f2 Vrai si les deux fichiers existent et si f1 est plus ancien que f2
I. La commande test
[ -f /home/test.txt ]
· [[ -f /etc/passwd ]] ; echo $? #0
- [ 2 -lt 3 ] ; echo $?
- varx=2 ; vary=3 ;
Exemples :
§ a="Bonjour" ; echo $?
Exemples :
Exemples :
Exemple 1 :
#!/bin/bash
echo -n “Donner un nombre: " read VAR
if [ $VAR -gt 10 ]
then
echo “Ce nombre est supèrieur à 10 !
else
echo “Ce nombre est inférieur ou égal à 10 !“
fi
Exemple 2 :
if [ $# = 0 ]
then
echo "$0 : Aucun argument recu !"
fi
if cp "$1" "$1%"
then
echo "sauvegarde de $1 reussie"
else
echo "sauvegarde du fichier $1 impossible"
fi
La structure if..elif..else
if commande test – conditions vraies
then
Instructions ...
elif commande test – conditions vraies
then
Instructions ...
else
Instructions ...
fi
Les blocs elif et else sont facultatifs, la commande test peut réussir ou échouer,
Si elle réussit le bloc then est exécuté
Sinon le bloc else est exécuté
Exemple
#!/bin/bash
echo -n “Donner un nombre” read VAR
if [ $VAR -gt 10 ]
then
echo “Ce nombre est supérieur à 10 !”
elif [ $VAR -eq 10 ]
then
echo “Ce nombre est égal à 10 !”
else
echo “Ce nombre est inférieur à 10 !”
fi
Exemple
case $# in
0)
echo "aucun parametre"
echo "Syntaxe : $0 "
;;
1)
echo "1 parametre passe au programme : $1"
;;
2)
echo "2 parametres passes au programme : $1 et $2 "
;;
*)
echo "TROP DE PARAMETRES !"
esac
#Boucle infinie
for (( ; ; ))
do
echo "infinie [ CTRL-C pour arrêter]"
done
#Exemple Factoriel
counter=$1
factorial=1
while [$counter -gt 0] //Greater then : comparaison
do
factorial=$((factorial * counter ))
counter=$((counter - 1 ))
done
echo $factorial
#Exemple
x=20
until [ $x -lt 10 ]; do //Less then : comparaison
echo "The counter is $x"
let x-=1
done
3- Les Fontions
*En dehors d’un script : on peut créer des fonctions pour regrouper des séries
d'instructions couramment exécutées et effectuer le même travail qu’un script Shell .
-Elle prend des arguments de la même manière qu'un script mais pas entre les
parenthèses, accessibles via $1 $2 etc … au sein de la fonction.
function nomf ()
instruction1 ;
instruction2 ;
}
⇒ Les parenthèses sont optionnelles
Exemple :
function fonction1 ()
{
pwd ;
mkdir rep1 ;
echo ‘’répértoire rep1 crée’’ ;
}
nom_fonction()
Instruction1
Instruction2
...;
}
⇒ Les parenthèses obligatoires
Courant :
$ declare -F
$unset fonction1
-Pour déclarer une fonction d’une façon permanente c’est-à-dire à chaque ouverture
du Shell Bash, on peut la définir :
* Dans le fichier /etc/bashrc : dans ce cas, ils seront définis dans
4- Les Tableaux
L'expression ${!tab[@]} est une expansion de paramètre qui se traduit par une
liste de toutes les clés du tableau associatif tab. L'option [@] permet de récupérer
toutes les clés, tandis que l'opérateur ! appliqué à tab permet de récupérer les
noms de toutes les clés.
La variable $ {!tab[@]} est utilisée pour obtenir les indices du tableau.
Note: Toutes les variables sont des tableaux. Par défaut, c'est le premier élément qui
est appelé
Exemple 1:
varz="dog"
echo $varz //Afficher le contenu de variable varz qui est dog.
echo ${varz} //Afficher le contenu de premier élément de tableau (Voir note )
varz qui est dog.
Exemple 2:
#!/bin/bash
# Mettre les arguments du script dans un tableau
tabxx=( "$@" ); //tabxx=("$1" "$2" "$3" ...)
echo ${tabxx[1]}; //Afficher du deuxième argument
echo "Nombre d’éléments: ${#tabxx[@]} " ;//afficher le nombre des éléments de
tableau
echo "Les éléments sont: ${tabxx[@]}; // afficher tous les éléments du tableau
Exemple 2:
#!/bin/bash
tab=("Alice" " Bob" " Sam" " Rim" ) // Déclarer un tableau tab
#Bash Style
for i in ${!tab[@]}; do //Obtenir les indices du tableau
echo ${tab[i]}; //Afficher les éléments du tableau
done
#C style
for (( i=0; i < ${#tab[@]}; i++ )); do
echo ${tab[i]};
done
Exemple 1:
#!/bin/bash
while getopts 'abc' OPTION; do
case "$OPTION" in
a) echo "Option a used "
;;
b) echo "Option b used"
;;
c) echo "Option c used"
;;
?) echo "Usage: $(basename $0) [-a] [-b] [-c]"
exit 1
;;
esac
done
Exemple 2:
#!/bin/bash
while getopts ':ab:c:' OPTION; do
case "$OPTION" in
a)echo "Option a used"
;;
b)argB="$OPTARG"
echo "Option b used with: $argB"
;;
c) argC="$OPTARG"
echo "Option c used with: $argC"
;;
?) echo "Usage: $(basename $0) [-a] [-b argument] [-c argument]"
exit 1
;;
esac
done
#Le caractère “:” après chaque option spécifie que cette option doit être suivie d'un
argument.
# ?) : Si l'option spécifiée n'est pas valide ou si une option qui nécessite un argument
est spécifiée sans argument
Exemple 3:
echo "Before - variable one is: $1"
shift "$(($OPTIND -1))"
echo "After - variable one is: $1"
echo "The rest of the arguments (operands)"
for x in "$@"
do
echo $x
done
#La commande shift "$(($OPTIND -1))" est utilisée pour décaler les
arguments d'entrée de la position des options traitées par getopts. Cela signifie
que la prochaine variable d'entrée sera $1, et que les options traitées ne seront plus
considérées dans le reste du script.