Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/12/2009, à 20:52

Hizoka

(resolu) Ignorer la casse dans un case

Bonsoir,

je voulais savoir si dans un case il était possible de faire en sorte que la casse ne soit pas prise en compte.

Exemple :

exemple=OGG

case ${exemple} in
  ogg) eco "ogg" ;;
  aac) echo "aac" ;;
esac

je sais qu'on peut faire :

exemple=OGG

case ${exemple} in
  ogg|OGG) eco "ogg" ;;
  aac|AAC) echo "aac" ;;
esac

mais je voulais savoir s'il existé une option permettant de dire à case de ne pas tenir compte de la casse.

merci.

Dernière modification par Hizoka (Le 11/12/2009, à 10:09)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 10/12/2009, à 21:40

Totor

Re : (resolu) Ignorer la casse dans un case

Pour activer l'option : set - s nocaseglob
Pour la désactiver : set -u nocaseglob


-- Lucid Lynx --

Hors ligne

#3 Le 10/12/2009, à 22:14

Hizoka

Re : (resolu) Ignorer la casse dans un case

donc d'apres ce que je pige :

exemple=OGG

set - s nocaseglob
case ${exemple} in
ogg) eco "ogg" ;;
aac) echo "aac" ;;
esac
set -u nocaseglob

devrait marché.... pourtant ce n'est pas le cas....


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 10/12/2009, à 23:22

FRUiT

Re : (resolu) Ignorer la casse dans un case

exemple=$(echo -n $exemple | tr '[:upper:]' '[:lower:]')

ou

case "$(echo -n $exemple | tr '[:upper:]' '[:lower:]')" in
  *) ;;
esac

Dernière modification par FRUiT (Le 10/12/2009, à 23:25)


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#5 Le 11/12/2009, à 02:36

sputnick

Re : (resolu) Ignorer la casse dans un case

( shopt -s nocasematch; x=FOO; case $x in foo) echo ok;; *) echo no;; esac )

ok


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 11/12/2009, à 09:54

Totor

Re : (resolu) Ignorer la casse dans un case

Totor a écrit :

Pour activer l'option : set - s nocaseglob
Pour la désactiver : set -u nocaseglob

yikes
c'est shopt (et non set) bien évidement !
shopt = shell option

Pour nocaseglob ou nocasematch, tout dépend de la version de bash... (je n'ai pas nocasematch au taf - 3.00.15(1))

Désolé pour l'erreur et merci à sputnick d'avoir rectifié !

Dernière modification par Totor (Le 11/12/2009, à 09:55)


-- Lucid Lynx --

Hors ligne

#7 Le 11/12/2009, à 09:58

FRUiT

Re : (resolu) Ignorer la casse dans un case

Hizoka a écrit :

donc d'apres ce que je pige :

exemple=OGG

set - s nocaseglob
case ${exemple} in
ogg) eco "ogg" ;;
aac) echo "aac" ;;
esac
set -u nocaseglob

devrait marché.... pourtant ce n'est pas le cas....

T'es sur que tu es bien en bash ?

Ca ne marche pas avec sh par exemple.


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#8 Le 11/12/2009, à 10:09

Hizoka

Re : (resolu) Ignorer la casse dans un case

exemple=OGG
shopt -s nocaseglob
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocaseglob

fonctionne tres bien smile

merci !!

FRUIT => ça ne venait pas de moi mais du code smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 30/01/2011, à 21:37

nordinatueur

Re : (resolu) Ignorer la casse dans un case

#!/bin/bash 
exemple=OGG
shopt -s nocaseglob
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocaseglob

Ne fonctionne pas chez moi...
J'ai GNU bash 4.1.5
Vous sauriez pourquoi ?


Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#10 Le 30/01/2011, à 22:58

Hizoka

Re : (resolu) Ignorer la casse dans un case

en effet, ça ne passe plus chez moi non plus...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 31/01/2011, à 00:31

FRUiT

Re : (resolu) Ignorer la casse dans un case

Sinon en bash :

case ${exemple,,} in

Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#12 Le 31/01/2011, à 08:33

pode

Re : (resolu) Ignorer la casse dans un case

Une autre solution est d'utiliser typeset -l, à condition qu'on accepte que la valeur de la variable soit automatiquement modifiée :

man bash
[...]
       typeset [-aAfFilrtux] [-p] [name[=value] ...]
[...]
              -l     When  the  variable  is  assigned a value, all upper-case
                     characters are converted to lower-case.   The  upper-case
                     attribute is disabled.

Et donc :

$ cat casse.sh 
#!/bin/bash
typeset -l exemple
exemple=OGG

case ${exemple} in
  ogg) echo "ogg" ;;
  aac) echo "aac" ;;
esac
$ ./casse.sh 
ogg

Hors ligne

#13 Le 31/01/2011, à 08:41

serged

Re : (resolu) Ignorer la casse dans un case

nordinatueur a écrit :
#!/bin/bash 
exemple=OGG
shopt -s nocaseglob
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocaseglob

Ne fonctionne pas chez moi...
J'ai GNU bash 4.1.5
Vous sauriez pourquoi ?

Je ne sais pas pourquoi, mais la bonne option est nocasematch !

#!/bin/bash 
exemple=OGG
shopt -s nocasematch
case ${exemple} in
ogg) echo "ogg" ;;
aac) echo "aac" ;;
esac
shopt -u nocasematch

LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#14 Le 31/01/2011, à 09:49

Hizoka

Re : (resolu) Ignorer la casse dans un case

ouais mais au final, c'est pas con la soluce de FRUIT smile

case ${exemple,,} in

un chouille plus simple.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#15 Le 31/01/2011, à 13:48

serged

Re : (resolu) Ignorer la casse dans un case

Hizoka a écrit :

ouais mais au final, c'est pas con la soluce de FRUIT smile

case ${exemple,,} in

un chouille plus simple.

Par contre une explication sur le pourquoi ça fonctionne ?


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#16 Le 31/01/2011, à 13:56

Hizoka

Re : (resolu) Ignorer la casse dans un case

exemple=OGG
echo ${exemple,,}
=> ogg

la commande ${var,,} transforme toutes les lettres en minuscule, du coup on est bon par rapport au case.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#17 Le 31/01/2011, à 14:59

ehmicky

Re : (resolu) Ignorer la casse dans un case

Salut,
nocaseglob est pour le globbing dans l'expansion de nom de fichier (et pour les tests =~), et nocasematch dans les case et tests ==, != et =~ avec [[ ]] (et nocasematch demande Bash3) :

$ bash --version | head -n1
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
$ ls
AAA
$ ls a*
ls: cannot access a*: No such file or directory
$ [[ a == A ]] && echo oh
$ [[ a =~ A ]] && echo oh
$ shopt -s nocaseglob
$ ls a*
AAA
$ [[ a == A ]] && echo oh
$ [[ a =~ A ]] && echo oh
oh
$ shopt -u nocaseglob
$ shopt -s nocasematch
$ ls a*
ls: cannot access a*: No such file or directory
$ [[ a == A ]] && echo oh
oh
$ [[ a =~ A ]] && echo oh
oh
$ shopt -u nocasematch

Dernière modification par ehmicky (Le 31/01/2011, à 15:01)


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#18 Le 31/01/2011, à 15:31

nordinatueur

Re : (resolu) Ignorer la casse dans un case

Et bien au moins j'ai trouvé l'occasion de (re)lire le man de bash.
En relisant un peu mieux, je me rend compte que j'ai confondu les deux paragraphes.

Finalement j'ai trouvé ${parameter,,pattern} et ${parameter^^pattern} qui sont bien plus utiles que ce que je cherchais, et c'est plus simple à utiliser... Mais je ne sais pas pour quelles versions de BASH.

Merci quand même. ( Après un déterrage d'un an ! ) C'est bon à savoir.

Par contre, j'ai toujours le même soucis, ni nocaseglob, ni nocasematch, n'apparait dans $BASH_OPTS


Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#19 Le 31/01/2011, à 15:37

ehmicky

Re : (resolu) Ignorer la casse dans un case

${VAR,,} et les autres sont apparus avec Bash 4.
Par contre $BASHOPTS est sans le _ smile


Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#20 Le 31/01/2011, à 15:40

nordinatueur

Re : (resolu) Ignorer la casse dans un case

ehmicky a écrit :

${VAR,,} et les autres sont apparus avec Bash 4.
Par contre $BASHOPTS est sans le _ smile

Ça n'apparait pas plus ...

francisco@Francisco:~$ shopt -s nocaseglob 
francisco@Francisco:~$ echo $BASHOPTS 
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:interactive_comments:progcomp:promptvars:sourcepath

Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !

Hors ligne

#21 Le 31/01/2011, à 15:44

ehmicky

Re : (resolu) Ignorer la casse dans un case

De mon côté, j'ai ça :

$ echo $BASHOPTS 
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:globstar:histreedit:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
$ shopt -s nocaseglob
$ echo $BASHOPTS 
checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:globstar:histreedit:hostcomplete:interactive_comments:nocaseglob:progcomp:promptvars:sourcepath
$ shopt | grep nocaseglob
nocaseglob         on
$ bash --version | head -n1
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)

Stego++, bibliothèque libre de stéganographie (avec cryptographie), à venir !
Besoin de votre aide :
Stats sur les compilateurs C++ les plus utilisés
Comment utiliser les archetypes C++ ?

Hors ligne

#22 Le 31/01/2011, à 16:38

Watael

Re : (resolu) Ignorer la casse dans un case

salut

shopt nocaseglob
nocaseglob        off

pas besoin de grep smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#23 Le 31/01/2011, à 16:50

Totor

Re : (resolu) Ignorer la casse dans un case

et pas besoin du head ...

echo ${BASH_VERSION}
# ou
echo ${BASH_VERSINFO[@]}

si déjà dans un environnement bash..
wink


-- Lucid Lynx --

Hors ligne