🌙
  • 🇺🇸 English
  • 🇫🇷 Français
  • 🇪🇦 Español

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 :

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 :

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érationDescription
a == ba est égale à b
a != ba n’est pas égale à b
a -lt ba est plus petit que b
a -gt ba est plus grand que b
a && bLes propositions a et b sont vraies
a || bLa 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 :

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.