Re: [gull] bash et condition avec le if

2022-04-04 Par sujet felix via gull
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

2022-04-03 Par sujet Rémi Voirin via gull

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