Re: [gull] bash et condition avec le if
Salut Céd, Le Tue, Mar 29, 2022 at 09:34:11PM +0200, Cédric BRINER via gull a écrit : > en python, je peux écrire > if ("a" == "b")and("c" == "c"): > echo "succes" > else > echo "pas succes" if [[ $a == b ]] && [[ $c == c ]] ;then if [ "$a" -eq "$b" ] && [ "$c" -eq "42" ] ; then (-eq implique des valeurs numériques) > comment peut-on faire un truc pareil en shell: > j'ai vu qu'il y a : > - l'opérateur "-o" "-a" > - l'opérateur || ou && > Je n'utilise quasiment jamais `-o'. D'une manière générale, entre ``if'' et ``then'', tu peux mettre un peu ce que tu veux: if { read _;read _ _ _ use _;} < <(df -k /); [[ $use -gt 1234 ]] ;then > et comment est-ce que ça fonctionne avec des trucs un peu plus complexe > comme: > if (("a"=="b")or("a"=="d"))and("a"=="d") Parenthèses en imbrication, comme en maths: if [[ ad == ab ]] || [[ aa == ac ]] && [[ cc == cc ]] ;then echo yes ;else echo no ;fi Voire: if { [[ ad == ab ]] || [[ aa == ac ]] ;} && [[ cc == cc ]] ;then echo yes ;else echo no ;fi > Si quelqu'un a une bonne documentation sur le sujet. $ man -P'pager +/Compound\ Commands' bash > et ce serait bien aussi de pouvoir faire un > > if [[ -x filepath ]] and [[ -n filepath ]] if [[ -n "$filepath" ]] && [[ -x "$filepath" ]] ;then Mais si tu utilises globshell pour définir ta variable, la moitié du boulot et déjà faite: filepath=(/path/to/files-*.txt) if [[ ! -e "$filepath" ]] ;then echo No file found. ; exit ; fi for file in "${filepath[@]}";do echo "Processing '$file'." La première ligne créé une variable de type ``array'' qui contiendra - soit un seul element qui correspondra à ton pattern ('/path/to/files-*.txt`) et qui ne sera donc PAS un fichier, - soit une liste d'élément correspondant à ton pattern, que tu pourras accéder simplements "${filepath[n]}" (pour n = 0 .. qte elements -1) -- Félix Hauri -- http://www.f-hauri.ch ___ gull mailing list gull@forum.linux-gull.ch https://forum.linux-gull.ch/mailman/listinfo/gull
Re: [gull] bash et condition avec le if
Salut Cédric, Dans les cas simples : - -o et -a sont gérés par test (man test) - || et && sont gérés par bash Si je comprends bien, tu te demandes comment gérer les priorités dans les opérations || et && dans les if, quand il y en a plusieurs, en bash ? Selon le man, partie "Lists" : Of these list operators, && and || have equal precedence, followed by ; and &, which have equal precedence. Séparer en deux "if" pour marquer la priorité entre deux opérations "et" ou "ou", n'est-ce pas une bonne solution au moins pour la lisibilité ? Autrement : > [[ -n filepath ]] -n c'est pour tester l'existence de contenu d'une variable, un filepath même inexistant va te retourner vrai car la chaine testée est forcément plus longue que "". Bonne soirée ! Rémi On 3/29/22 21:34, Cédric BRINER via gull wrote: Salut à tous, J'ai beau écrire pas mal de script en bash, j'ai toujours pas compris comment faire des if avec des "ou" ou avec des "et". en python, je peux écrire if ("a" == "b")and("c" == "c"): echo "succes" else echo "pas succes" comment peut-on faire un truc pareil en shell: j'ai vu qu'il y a : - l'opérateur "-o" "-a" - l'opérateur || ou && et comment est-ce que ça fonctionne avec des trucs un peu plus complexe comme: if (("a"=="b")or("a"=="d"))and("a"=="d") Si quelqu'un a une bonne documentation sur le sujet. et ce serait bien aussi de pouvoir faire un if [[ -x filepath ]] and [[ -n filepath ]] D'avance merci pour vos lumières. cED ___ gull mailing list gull@forum.linux-gull.ch https://forum.linux-gull.ch/mailman/listinfo/gull ___ gull mailing list gull@forum.linux-gull.ch https://forum.linux-gull.ch/mailman/listinfo/gull