Simplifier un test à 4 possibilités (si réalisable et utile...)
Swiss Knight
Messages postés
1956
Date d'inscription
Statut
Membre
Dernière intervention
-
Swiss Knight Messages postés 1956 Date d'inscription Statut Membre Dernière intervention -
Swiss Knight Messages postés 1956 Date d'inscription Statut Membre Dernière intervention -
Salut,
Est-il possible de simplifier le test suivant, permettant de vérifier si le nom de ${file} commence par une lettre ou un chiffre, et si l'extension contient des majuscules ou pas :
?
Si c'est pas possible, tant mieux.
En fait je me demande si cette solution est préférable à la suivante qui consiste à faire deux pairs de tests imbriqués :
ps : s'il y a selon vous des erreurs grossières, vous pouvez les souligner avec une petite explication, bien entendu.
ps2 : je ne sais pas du tout si dans ce cas, un "case" serait plus approprié / plus rapide.
;) Merci !
Est-il possible de simplifier le test suivant, permettant de vérifier si le nom de ${file} commence par une lettre ou un chiffre, et si l'extension contient des majuscules ou pas :
#!/bin/bash for file in $(find "~/test_folder" -maxdepth 1 -iregex ".*\(jpg\|jpeg\)$" -type f); do extension=$(echo $(basename ${file}) | awk -F . '{print $NF}') if [[ $(basename ${file}) =~ ^[A-Za-z] && ${extension} =~ [A-Z]{1,} ]] then echo "Le fichier $file est de type : lettre.MAJUSCULES" elif [[ $(basename ${file}) =~ ^[A-Za-z] && ${extension} =~ [a-z]{1,} ]] then echo "Le fichier $file est de type : lettre.minuscules" elif [[ $(basename ${file}) =~ ^[0-9] && ${extension} =~ [A-Z]{1,} ]] then echo "Le fichier $file est de type : chiffre.MAJUSCULES" elif [[ $(basename ${file}) =~ ^[0-9] && ${extension} =~ [a-z]{1,} ]] then echo "Le fichier $file est de type : chiffre.minuscules" fi done
?
Si c'est pas possible, tant mieux.
En fait je me demande si cette solution est préférable à la suivante qui consiste à faire deux pairs de tests imbriqués :
#!/bin/bash for file in $(find "~/test_folder" -maxdepth 1 -iregex ".*\(jpg\|jpeg\)$" -type f); do extension=$(echo $(basename ${file}) | awk -F . '{print $NF}') if [[ $(basename ${file}) =~ ^[A-Za-z] ]] then if [[ ${extension} =~ [A-Z]{1,} ]] then echo "Le fichier $file est de type : lettre.MAJUSCULES" else echo "Le fichier $file est de type : lettre.minuscules" fi else if [[ ${extension} =~ [A-Z]{1,} ]] then echo "Le fichier $file est de type : chiffre.MAJUSCULES" else echo "Le fichier $file est de type : chiffre.minuscules" fi fi done
ps : s'il y a selon vous des erreurs grossières, vous pouvez les souligner avec une petite explication, bien entendu.
ps2 : je ne sais pas du tout si dans ce cas, un "case" serait plus approprié / plus rapide.
;) Merci !
A voir également:
- Simplifier un test à 4 possibilités (si réalisable et utile...)
- Test performance pc - Guide
- Test steam deck oled - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
- Test batterie pc - Guide
2 réponses
Salut,
Honnêtement je resterai sur ta 1ère idée et les 4 tests successifs. Le
Par contre le
Sers-toi plutôt du remplacement de paramètres du bash.
Ce qui se traduirait pour ton 1er
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot. <('')
Honnêtement je resterai sur ta 1ère idée et les 4 tests successifs. Le
casen'amènerait rien de plus si ce n'est des tests supplémentaires, les 4 cas primaires (basename) à traiter + à l'intérieur de chaque cas l'extension à vérifier...
Par contre le
extension=$(echo $(basename ${file}) | awk -F . '{print $NF}')n'est pas ce qui se fait de mieux ;-(
Sers-toi plutôt du remplacement de paramètres du bash.
$ echo "${C}"
/home/brol/tutu.txt
$ echo "${C##*/}"
tutu.txt
$ echo "${C##*.}"
txt
Ce qui se traduirait pour ton 1er
ifpar :
if [[ ${file##*/}) =~ ^[A-Za-z] && ${file##*.} =~ [A-Z]{1,} ]]--
Zen my nuggets ;-)
Faites un geste pour l'environnement, fermez vos fenêtres et adoptez un manchot. <('')