Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. ====== Opérateurs logiques, Conditions ====== <label type="info">Création</label> --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2020/03/11 15:37// ===== Opérateurs logiques ===== ==== Pour tous ==== |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''!'' | négation |Renvoie ''vrai'' si le test est faux | <sxh bash>[ -n "A" ] echo $? 0 [ ! -n "A" ] echo $? 1 </sxh> | | ''-a'' ou ''&&'' | et logique |Renvoie ''vrai'' si les deux variables sont ''vrai'' |<sxh bash>[ -n "A" -a -n "B" ] echo $? 0 </sxh> | | ''-o'' ou ''||'' | ou logique |Renvoie ''vrai'' si l'une des deux variables est ''vrai'' |<sxh bash>[ -n "A" -o -n "" ] echo $? 0 </sxh> | ==== Pour les chaînes de caractères ==== Les tests sur les chaînes sont effectués dans une structure à simple crochet. <callout type="warning" icon="true" title="Casse">Linux observe une strict sensibilité à la casse. ''A'' est donc différent de ''a''.</callout> |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''=='' | égal à |Renvoie ''vrai'' si les deux chaînes sont strictement identiques | <sxh bash>[ "A" == "A" ] echo $? 0 [ "A" == "a" ] echo $? 1 </sxh> | | ''!='' | différents de |Renvoie ''vrai'' si les deux chaînes sont différentes | <sxh bash>[ "A" == "A" ] echo $? 1 [ "A" == "a" ] echo $? 0 </sxh> | | ''-z'' | vide |Renvoie ''vrai'' si la chaîne est vide | <sxh bash>[ -z "" ] echo $? 0 [ -z "A" ] echo $? 1 </sxh> | | ''-n'' | non vide |Renvoie ''vrai'' si la chaîne n'est pas vide | <sxh bash>[ -n "" ] echo $? 1 [ -n "A" ] echo $? 0 </sxh> | ==== Pour les nombres ==== Les tests sur les nombres sont effectués dans une structure à double crochets. |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''-eq'' | égal à |Renvoie ''vrai'' si les deux nombres sont strictement égaux | <sxh bash>[[ 1 -eq 1 ]] echo $? 0 [[ 1 -eq 0 ]] echo $? 1 </sxh> | | ''-ne'' | différent de |Renvoie ''vrai'' si les deux nombres sont strictement différentes | <sxh bash>[[ 1 -eq 1 ]] echo $? 1 [[ 1 -eq 0 ]] echo $? 0 </sxh> | | ''-gt'' | supérieur à |Renvoie ''vrai'' si le premier nombre est strictement supérieur au second |<sxh bash>[[ 1 -gt 0 ]] echo $? 0 [[ 0 -gt 1 ]] echo $? 1 </sxh>| | ''-ge'' | supérieur ou égal à |Renvoie ''vrai'' si le premier nombre est supérieur ou égal au second |<sxh bash>[[ 0 -ge 0 ]] echo $? 0 [[ 0 -ge 1 ]] echo $? 1 </sxh>| | ''-lt'' | inférieur à |Renvoie ''vrai'' si le premier nombre est strictement inférieur au second |<sxh bash>[[ 1 -lt 0 ]] echo $? 1 [[ 0 -lt 1 ]] echo $? 0 </sxh>| | ''-le'' | inférieur ou égal à |Renvoie ''vrai'' si le premier nombre est inférieur ou égal au second |<sxh powershell>[[ 0 -le 0 ]] echo $? 0 [[ 1 -le 0 ]] echo $? 1 </sxh>| ==== Pour les expressions régulières ==== Les expressions régulières sont testées avec des doubles crochets et l'opérateur arithmétique ''=~'', exemple : <sxh bash>WORD="ABCD" [[ $WORD =~ [A-Z]* ]] echo $? 0 [[ $WORD =~ [0-9]* ]] echo $? 1</sxh> Pour plus d'explications sur les expressions régulières : [[powershell_regex|Les expressions régulières (regex)]] ==== Pour les fichiers et dossiers ==== Les fichiers et dossiers (dénommés dans les exemples par ''FILE'') peuvent être désignés directement ou au travers d'une variable. Leurs écritures peuvent être sous trois formes différentes : * **simple** : il s'agit simplement du nom de l'objet. Le test sera effectué dans le répertoire courant. * **relative** : il s'agit d'un fragment d'arborescence. La chaîne commence par 1 ou 2 ''.'', suivie de dossiers et terminée par le nom de l'objet. Le test sera effectué en suivant l'arborescence à partir du dossier courant. * **absolue** : il s'agit du chemin de l'objet depuis la racine du système. Le test est effectué sur ce chemin complet. |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''-e'' | existe |Renvoie ''vrai'' si l'objet existe | <sxh bash>[ -e /etc/issue ] echo $? 0 [ -e /etc/issuuue ] echo $? 1 </sxh> | | ''-s'' | existe et non vide |Renvoie ''vrai'' si l'objet existe et que sa taille n'est pas nulle | <sxh bash>touch test [ -s ./test ] echo $? 1 echo "hello" > test [ -s ./test ] echo $? 0 </sxh> | | ''-N'' | modifié |Renvoie ''vrai'' si l'objet existe et qu'il a été modifié depuis sa dernière lecture | <sxh bash>[ -N test ] echo $? 1 echo "hello" > test [ -N test ] echo $? 0 </sxh> | | ''-h'' | lien existant |Renvoie ''vrai'' si l'objet existe et qu'il a est un lien symbolique | <sxh bash>ln -s /etc/issue /home/user/ [ -h /home/user/issue ] echo $? 0 [ -h /etc/issue ] echo $? 1 </sxh> | ==== Pour les fichiers uniquement ==== |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''-f'' | fichier |Renvoie ''vrai'' si l'objet existe et qu'il s'agit d'un fichier | <sxh bash>[ -f /etc/issue ] echo $? 0 [ -f /etc ] echo $? 1 </sxh> | | ''-r'' | lisible |Renvoie ''vrai'' si l'objet existe, qu'il s'agit d'un fichier et qu'il est lisible | <sxh bash>[ -r test ] echo $? 0 chmod +r test [ -r test ] echo $? 1 </sxh> | | ''-w'' | modifiable |Renvoie ''vrai'' si l'objet existe, qu'il s'agit d'un fichier et qu'on peut le modifier | <sxh bash>[ -w test ] echo $? 0 chmod +w test [ -w test ] echo $? 1 </sxh> | | ''-x'' | exécutable |Renvoie ''vrai'' si l'objet existe, qu'il s'agit d'un fichier et qu'on peut l'exécuter | <sxh bash>[ -x test ] echo $? 0 chmod +x test [ -x test ] echo $? 1 </sxh> | ==== Pour les dossiers uniquement ==== |< 100% 10% 10% 50% 30% >| ^ Opérateur ^ Fonction ^ Explication ^ Exemple ^ | ''-d'' | dossier |Renvoie ''vrai'' si l'objet existe et qu'il s'agit d'un dossier | <sxh bash>[ -d /etc/issue ] echo $? 1 [ -d /etc ] echo $? 0 </sxh> | ===== Conditions & Tests ===== ==== if, then, elif, else, fi ==== ''if'' permet un test simple. On teste une condition et on applique un traitement si il est ''vrai''. Il est aussi possible d'y applique un autre traitement si le test est ''faux''. Les tests peuvent s'écrire sous deux formes différents : longue et courte. === Forme longue === <sxh bash>if [ "$VAR" == "A" ] then echo "VAR est égal à A" else echo "VAR est différent de A" fi</sxh> === Forme courte === <sxh bash>[ "$VAR" == "A" ] && echo "VAR est égal à A" || echo "VAR est différent de A"</sxh> Dans la forme courte, ''&&'' correspond à ''then'' et ''||'' à ''else''. === elif === On peut aussi ajouter d'autres conditions après une vérification vrai (''then'') et avant une vérification fausse (''else''). Ces nouvelles conditions sont introduites par ''elif'' selon le format : <sxh bash>if [ "$VAR" == "A" ] then echo "VAR est égal à A" elif [ "$VAR" == "B" ] then echo "VAR est égal à B" elif [ "$VAR" == "C" ] then echo "VAR est égal à C" # ---- Il peut y avoir autant de conditions elif que l'on souhaite ---- else echo "VAR est différent de A, B, C, etc..." fi</sxh> ==== case, esac ==== ''case'' permet d'appliquer un traitement selon la valeur testée. <sxh bash>AGE=1 case $AGE in 1) echo "Age = 1" ;; 2) echo "Age = 2" ;; 3|4) echo "Age = 3 ou 4" ;; *) echo "Age incertain" ;; esac</sxh> Chaque valeur de comparaison est indiqué avant un '')''. Si plusieurs valeurs correspondent au même bloc d'instruction, elles doivent être sur la même ligne, séparées par ''|'' et le tout suivit de '')''. Chaque bloc d'instruction doit toujours être terminée par '';;''. En dernière valeur, on peut donner ''*)'' qui symbolise le traitement par défaut. ~~DISCUSSION~~ bash_base_1.txt Dernière modification : 2021/07/22 08:38de nekan