====== Linux ======
===== Les contrôles booléens =====
\\
==== La commande 'test' ====
La commande ''test'' est une commande. À ce titre, ''test'' renvoie donc un statut vrai ou faux. Mais cette commande n'affiche rien à l'écran. Il faut donc, pour connaître le résultat d'un test, vérifier le contenu de la variable **$?**.
* **Test sur les fichiers**
test option "fichier"
^Option ^Signification ^
|-s |fichier "non vide" |
|-f |fichier "ordinaire" |
|-d |fichier "répertoire" |
|-b |fichier "spécial" mode "bloc" |
|-c |fichier "spécial" mode "caractère" |
|-p |fichier "tube" |
|-L |fichier "lien symbolique" |
|-h |fichier "lien symbolique" (identique à « -L ») |
|-r |fichier a le droit en lecture |
|-w |fichier a le droit en écriture |
|-x |fichier a le droit en exécution |
|-u |fichier a le "setuid" |
|-g |fichier a le "setgid" |
|-k |fichier a le "sticky bit" |
|-t [n] |fichier n°[n] est associé à un terminal (par défaut, [n] vaut 1) |
^ //Réservé au Ksh / Bash// ^^
|-S |fichier "socket" |
|-e |fichier existe quel que soit son type |
|-O |fichier m'appartient |
|-G |fichier appartient à mon groupe |
|-N |fichier modifié depuis sa dernière lecture |
\\
* **Test sur les chaînes de caractères**
test "fichier1" option "fichier2"
^Option ^Signification ^
|-z |chaîne de longueur nulle |
|-n |chaîne de longueur non nulle |
|= |chaîne1 identique à chaîne2 |
|!= |chaîne1 différente de chaîne2 |
Exemples :
$ var="1A"
$ [[ $var =~ ^[0-9]*$ ]] #renvoie faux
$ [[ $var =~ ^[0-9] ]] #renvoie vrai
$ [[ $var =~ [A-Z]{1} ]] #renvoie vrai
$ [[ $var =~ ^[0-1]{1}[A-Z]{1}$ ]] #renvoie vrai
\\
* **Test sur les valeurs numériques**
test nb1 option nb2
^Option ^Signification ^
|-eq |nb1 égal à nb2 (equal) |
|-ne |nb1 différent de nb2 (non equal) |
|-lt |nb1 inférieur à nb2 (less than) |
|-le |nb1 inférieur ou égal à nb2 (less or equal) |
|-gt |nb1 supérieur à nb2 (greater than) |
|-ge |nb1 supérieur ou égal à nb2 (greater or equal) |
Exemples :
$ test "5" = "05" #Renvoie "faux" (ce qui est mathématiquement incorrect)
$ test "5" -eq "05" #Renvoie "vrai" (correct)
\\
* **Connecteurs logiques**
Les connecteurs permettent de composer des expressions plus complexes.
^Option ^Signification ^
|-a |"ET" logique |
|-o |"OU" logique |
|! |"NOT" logique |
|(...) |Groupement d'expressions\\ (doit être protégé de backslashes pour ne pas que le shell l'interprète comme une demande de création de sous-shell) |
Exemple : Vérifie si l'année courante est bissextile (divisible par 4, mais pas par 100 ; ou divisible par 400)
$ y=`date '+%Y'` # Récupère l'année courante dans la variable "y"
$ test \( `expr $y % 4` -eq 0 ?a `expr $y % 100` -ne 0 \) ?o `expr $y % 400` -eq 0
\\
==== Les commandes 'true' et 'false' ====
Les commandes ''true'' et ''false'' n'ont d'autre but que de renvoyer un état respectivement à "vrai" ou "faux".
Exemples :
$ true # La commande renvoie la valeur "vrai"
$ echo $?
0
$ false # La commande renvoie la valeur "faux"
$ echo $?
1