Si vous voulez parler de plusieurs conditions, il suffit de les nids avec ()
:
$ d=23
$ ([ $d -ge 20 ] && [ $d -ge 5 ]) || [ $d -ge 5 ] && echo "yes"
yes
Cependant, dans ce cas, vous pouvez utiliser une expression régulière comme décrit dans Check if a string matches a regex in Bash script:
[[ $aSubj =~ ^(hu|ny)* ]]
Cette vérification si le contenu de la variable $aSubj
commence par hu
ou ny
.
Ou même d'utiliser l'expression régulière pour récupérer les fichiers. Par exemple, ce qui suit correspondra à tous les fichiers ttt/
répertoire dont le nom commence par soit a
ou b
:
for file in ttt/[ab]*
Notez que vous pouvez aussi nourrir votre boucle avec l'aide d'un process substitution avec find
contenant une expression régulière (échantillons en How to use regex in file find):
while IFS= read -r file
do
# .... things
done < <(find your_dir -mindepth 1 -maxdepth 1 -type d -regex '.*/\(hu\|ny\).*')
Par exemple, si je les dirs suivants:
$ ls dirs/
aa23 aa24 ba24 bc23 ca24
-je obtenir ce résultat si je cherche des répertoires dont le nom commence par soit ca
ou bc
:
$ find dirs -mindepth 1 -maxdepth 1 -type d -regex '.*/\(ca\|bc\).*'
dirs/bc23
dirs/ca24
Votre utilisation de '[' et '[[' semble un peu aléatoire. –
Chaque condition a juste un '[', mais certains d'entre eux sont imbriqués –
Pourquoi essayez-vous de les imbriquer? –