NOTE Post Réécriture : Cet article, et bien dâautres, fait parti de la sĂ©rie âScript kiddieâ. Il a Ă©tĂ© Ă©crit il y a plusieurs annĂ©es. Son contenu nâest pas Ă jour et il contient potentiellement des erreurs. Plus dâinformation sur la page de prĂ©sentation de la sĂ©rie.
Cette partie cous paraĂźtra totalement inutile pour le moment. Sautez-la et revenez-y quand elle vous semblera indispensable.
Automatisez des tĂąches, câest le fondement mĂȘme de lâinformatique, et cela vous sera dâautant plus utile quand il faudra effectuer de multiples manips avec trĂšs peu dâintervalle entre chacune, que cela soit sur votre machine ou sur celle de votre victime. Bien quâil existe de nombreux langages de programmation, celui qui restera le plus pratique quand vous travaillez sur Linux, câest Shell.
Il sâagit de lâensemble des commandes agrĂ©mentĂ©es de quelques instructions logiques. Ce langage est donc disponible, quelle que soit la machine sur laquelle vous travaillez (sauf celle sur Windows).
Explorons-le !
Les Variables
Pour déclarer une variable, rien de plus simple :
x=3
Pour afficher la valeur de la variable :
echo $x
On en tire deux rÚgles simples :
- Une variable se dĂ©clare en tapant son nom, suivi du symbole = et dâune valeur (nombre, chaĂźne de caractĂšre, etc.).
- Pour accĂ©der Ă la valeur dâune variable, il suffit de rajouter $ devant son nom.
Vous pouvez Ă©galement mettre le rĂ©sultat dâune commande dans une variable en utilisant ce type de guillemet â (en dessous du 7 sur un clavier AZERTY), ex :
x=`tail -n 1 fichier.txt`
x aura alors pour valeur une chaĂźne de caractĂšre correspondant Ă la derniĂšre ligne de fichier.txt.
Les opérations mathématiques de base
Pour réaliser une opération, il faut ajouter le mot-clef let devant :
let x=â3+3â
echo $x
6
On peut également additionner les valeurs des variables :
x=3
y=2
let z="$x+$y"
echo $z
5
WARN : Pour ce genre dâaction, vous serez obligĂ© dâutiliser le guillemet anglais (â).
Les autres opérations viennent donc logiquement sous cette forme :
La soustraction
let z="$x-$y"
echo $z
1
La multiplication
let z="$x*$y"
echo $z
6
La division
La division ne prendra que la partie entiĂšre du quotient.
let z="$x/$y"
echo $z
1
Le modulo
Vous nâavez peut-ĂȘtre jamais vu cette opĂ©ration en mathĂ©matiques (câest que vous avez Ă©chappĂ© au cours dâarithmĂ©tique, la chance), elle correspond au reste dâune division euclidienne.
let z="$x*$y"
echo $z
1
Les conditions
Les conditions vous permettront de commencer Ă faire des actions logiques.
Elles se présentent sous cette forme :
- Si la condition est vraie
- Alors faireâŠ
- Sinon Si deuxiĂšme condition est vraie
- Alors faireâŠ
- Sinon Si troisiĂšme condition est vraie
- âŠ
- Sinon
- FaireâŠ
Bien sĂ»r, la condition de base nâest pas aussi dĂ©veloppĂ©e et complĂšte que ça, on se contenterait alors dâun maigre bloc Si condition vraie â Faire.
La condition sâexprime ainsi en shell :
if [[ condition ]]
then
faireâŠ
fi
Je lâai exprimĂ© sur plusieurs lignes, mais vous pouvez Ă©galement le faire en une seule instruction comme ceci :
if [[ condition ]]; then faireâŠ; fi
La premiÚre écriture convient mieux au fichier et la deuxiÚme à la ligne de commande.
Notez bien la prĂ©sence dâespace entre les crochets et la condition, ils sont absolument nĂ©cessaires, sans quoi bash vous retournera une erreur.
Voici le tableau regroupant les différentes opérations logiques :
| Opération | Description |
|---|---|
a == b | a est égale à b |
a != b | a nâest pas Ă©gale Ă b |
a -lt b | a est plus petit que b |
a -gt b | a est plus grand que b |
a && b | Les propositions a et b sont vraies |
a || b | La condition a ou la condition b est vraie |
La reprĂ©sentation dâune condition en bash devient donc, par exemple :
x=3
y=2
if [[ $x -gt $y ]]
then
echo âx est supĂ©rieur Ă yâ
fi
Elle peut se traduire en français par : « si x est plus grand que y, alors dire âx est supĂ©rieur Ă yâ. »
Pour utiliser les opérateurs autres opérateurs (et / ou), voici un deuxiÚme exemple :
x=3
y=2
if [[ $x -gt $y ]] || [[ $x == $y ]]
then
echo âx est supĂ©rieur ou Ă©gale Ă yâ
fi
Ce qui peut se traduire par : « si x est plus grand OU Ă©gale Ă y, alors dire âx est supĂ©rieur ou Ă©gale Ă yâ. »
Pour rappelle, vous pouvez exprimer une condition en une seule ligne, ce qui donnerait pour le deuxiÚme exemple :
x=3;y=2;if [[ $x -gt $y ]] || [[ $x == $y ]];then echo âx est supĂ©rieur ou Ă©gale Ă yâ;fi
Ăcrire son code dans un fichier
Depuis tout Ă lâheure, je vous prĂ©sente deux maniĂšres de coder en shell (bash) car vous nâĂȘtes actuellement pas en mesure de faire un fichier contenant ces bouts de code pouvant sâexĂ©cuter. Laissez-moi donc vous montrer comment faire en reprenant un des morceaux de code Ă©crit plus haut :
#!/bin/bash
x=3
y=2
if [[ $x -gt $y ]] || [[ $x == $y ]]
then
echo âx est supĂ©rieur ou Ă©gale Ă yâ
fi
Enregistrez ce morceau de code dans un fichier que vous noterez test.sh,
puis rendez le exécutable avec chmod. Lancez le en ajoutant ./ devant et le tour est joué.
Vous devinerez aisément les deux rÚgles qui découle de cet exemple :
- Un fichier shell porte lâextension .sh
- Il faut mettre « #!/bin/bash » au dĂ©but du fichier pour dire Ă lâordinateur quel interprĂ©teur de commande va ĂȘtre utilisĂ©
Vous ĂȘtes donc prĂȘt pour Ă©crire de grands codes en shell !
Les boucles
Les boucles sont juste des conditions qui se rĂ©pĂštent tant quâelles se trouvent ĂȘtre vraies. Une fois fausses, les boucles sâarrĂȘtent. Avec shell, le mot-clef pour faire une boucle est « while », suivi de « do » et elle se finit par « done »
Ce qui donne :
while [[ condition ]]
do
faitâŠ
done
Par exemple, on veut afficher 5 fois le mĂȘme message Ă lâĂ©cran :
x=0
while [[ x -lt 5 ]]
do
echo âMon messageâ
let x=â$x+1â
done
WARN : Nâoubliez pas dâincrĂ©menter vos variables, vous vous retrouveriez dans une boucle infinie si ce nâĂ©tait pas le cas.
Ceci Ă©tant dit, vous avez dĂšs Ă prĂ©sent de quoi faire des scripts assez pratique, pour une utilisation personnelle ou pour sâen servir sur la machine dâun autre. Je ne peux quâĂȘtre assez exhaustif ici malheureusement, du fait de mes faibles connaissances en la matiĂšre et de par mon incapacitĂ© Ă rĂ©sumĂ© lâensemble des notions Ă voir sur ce sujet.