====== 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