23/09/204
Les tests et Si (IF) pour prendre des décisions !
Pré-requis
But
Savoir faire des tests, sur des entiers , des chaines , des fichiers , des répertoires.
Savoir écrire du pseudo code en français.
Titre : TPSHELLSI
Appelé aussi algorithme en français
C'est un langage se rapprochant de notre langue naturelle qui va nous permettre de coder , c'est à dire définir un algorithme , une technique de programmation pour obtenir un résultat.
Lorsque vous ferez un programme il faudra définir un algorithme , souvent les gens néglige cet aspect et c'est un tort car ils le font malgré eux dans leur tête sauf que cela risque d'être à l'état de brouillon et ne sera pas la meilleure solution .
Donc il faudra s'efforcer de faire un algorithme en pseudo code avant de faire un programme.
Et pour comprendre un programme faire l'inverse.
Le pseudo code est destiné aux "HUMAINS"
En Shell la syntaxe est particulière:
# exemple de if (si)
if [ test ]
then
Action1()
Action2()
else
Action3()
fi
#Exemple de pseudo code ! du code a coté!
Debut:
Si test est vrai
Debut:
Action1
Action2
Fin:
Sinon
Debut:
Action3
Fin:
Fin:
exemple d'un code : boss
#!/bin/bash
echo -n "votre prenom en minuscule svp:"
read nom
if [ $nom = "bruno" ]
then
echo "Salut Boss !"
else
echo "T Ki ?"
fi
#PSeudo code
nom est une variable type chaine de caractere
Debut:
Si nom = "bruno"
Debut:
Afficher ("Salut Boss !")
Fin:
Sinon
Debut:
Afficher ("T Ki ?")
Fin:
rque: attention les espaces autour du signe = sont importants .
Ecrire un code "identification" qui donnera cela (utiliser le passage de paramètre vu avant)
./identification bruno
Salut Boss
./identification toto
T Ki ?
pour pouvoir exécuter le script , il faut :
chmod +x nom_du_programme
$chaine1 = $chaine2
Vérifie si les deux chaînes sont identiques. Notez que bash est sensible à la casse : « b » est donc différent de « B ».
Il est aussi possible d'écrire « == » pour les habitués du langage C.
$chaine1 != $chaine2
Vérifie si les deux chaînes sont différentes.
-z $chaine
Vérifie si la chaîne est vide.
$num1 -eq $num2
Vérifie si les nombres sont égaux (equal). À ne pas confondre avec le « = » qui, lui, compare deux chaînes de caractères.
$num1 -ne $num2
Vérifie si les nombres sont différents (nonequal).
Encore une fois, ne confondez pas avec « != » qui est censé être utilisé sur des chaînes de caractères.
$num1 -lt $num2
Vérifie sinum1est inférieur ( < ) ànum2(lowerthan).
$num1 -le $num2
Vérifie sinum1est inférieur ou égal ( <= ) ànum2(lowerorequal).
$num1 -gt $num2
Vérifie sinum1est supérieur ( > ) ànum2(greaterthan).
$num1 -ge $num2
Vérifie sinum1est supérieur ou égal ( >= ) ànum2(greaterorequal).
Exemple avec nombres :
#!/bin/bash
echo -n "votre age :"
read age
if [ $age -ge 18 ]
then
echo Vous êtes majeur
else
echo "vous n'êtes pas majeur , demander a vos parents !"
fi
-e $nomfichier
Vérifie si le fichier existe.
-d $nomfichier
Vérifie si le fichier est un répertoire. N'oubliez pas que sous Linux, tout est considéré comme un fichier, même un répertoire !
-f $nomfichier
Vérifie si le fichier est un… fichier. Un vrai fichier cette fois, pas un dossier.
-r $nomfichier
Vérifie si le fichier est lisible (r).
-w $nomfichier
Vérifie si le fichier est modifiable (w).
-x $nomfichier
Vérifie si le fichier est exécutable (x).
$fichier1 -nt $fichier2
Vérifie sifichier1est plus récent quefichier2(newerthan).
$fichier1 -ot $fichier2
Vérifie sifichier1est plus vieux quefichier2(olderthan).
Ecrire un code code.sh qui va écrire un fichier bonjour.txt contenant bonjour le monde si il n'existe pas, sans poser de question , si il existe on ne fait rien
#!/bin/bash
# on passe en parametre le nom du fichier
# ./code.sh bonjour.txt # par exemple
if [ $# -ne 1 ]
then
echo "il me faut un argument svp "
echo " syntaxe : ./cfichier fichier "
exit
fi
if [ -e $1 ]
then
echo "le fichier $1 existe déja !"
else
echo "le fichier $1 n'existe pas ! mais je le fait "
echo "Bonjour le monde ! " > $1 # on crée le fichier
fi