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 08/01/2016, à 12:29

ar barzh paour

[Résolu] équivalence

encore une autre ....
là j'ai cherché pourquoi mon script ne fonctionnait pas
(évidemment le script réel est plus compliqué que ça)
alors pourquoi

#!/bin/bash    # ajouté suite remarque de tiramiseb car c'est bien du bash
deb="2"
modele="?"
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi

retourne NonOK

alors que

 #!/bin/bash         # ajouté suite remarque de tiramiseb car c'est bien du bash
deb="A2"
modele="A?"
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi

retourne bien OK

Dernière modification par ar barzh paour (Le 09/01/2016, à 04:31)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 08/01/2016, à 13:26

credenhill

Re : [Résolu] équivalence

hello
c'est un . qu'il faut, c'est une expr. reg.

$ head f9
#!/bin/bash
deb="2"
modele="."
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi
$ ./f9
2 OK

Dernière modification par credenhill (Le 08/01/2016, à 13:28)

Hors ligne

#3 Le 08/01/2016, à 14:36

tiramiseb

Re : [Résolu] équivalence

En effet, "modele" doit être une regex. Renseigne-toi sur les regex...

credenhill a écrit :

c'est une expr. reg.

regular expression (en)
expression rationnelle (fr)

pas « expression régulière »

Hors ligne

#4 Le 08/01/2016, à 15:13

ar barzh paour

Re : [Résolu] équivalence

merci à tous les deux
j'ai confondu les caractères utilisés dans la substitution de nom de fichier
je relis bien
Caractères communs aux ERb et ERe
( remarque : j'ai comme traduction expressions régulières basiques / étendues)
.      Un caractère quelconque
hop hop hop
je m'étais basé à tort semble-t-il sur la syntaxe de
${variable#modele} où l'on indique que "modele" peut inclure les caractères *  ?  etc. de la substitution de fichier .....

et pourtant ce qui suit fonctionne bien donc pas tout à fait  la même syntaxe !!!

nom_simple="2014-12-31:12-05-26 animation"
modele="[12][0-9][0-9][0-9]?[0-2][0-9]?[0-3][0-9]?[0-2][0-9]?[0-5][0-9]?[0-5][0-9]*"
deb=${nom_simple:0:19}
echo "début :**${deb}**"
if [[ $deb = $modele ]]
then
echo OK
else
echo Non OK
fi

PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#5 Le 08/01/2016, à 15:20

tiramiseb

Re : [Résolu] équivalence

if [[ $deb = $modele ]]

Il te manque un "~"...


Là tu fais du pattern matching de base, sans regex.

Dernière modification par tiramiseb (Le 08/01/2016, à 15:23)

Hors ligne

#6 Le 08/01/2016, à 15:24

tiramiseb

Re : [Résolu] équivalence

[ajoutons en passant que tout ça c'est de la syntaxe bash hein, pas de la syntaxe shell standard... si quelqu'un lit cette discussion dans 2 ans, que ça soit bien clair pour lui]

Dernière modification par tiramiseb (Le 08/01/2016, à 15:24)

Hors ligne

#7 Le 08/01/2016, à 16:00

credenhill

Re : [Résolu] équivalence

tiramiseb a écrit :
credenhill a écrit :

c'est une expr. reg.

regular expression (en)
expression rationnelle (fr)

pas « expression régulière »

blablabla
Une expression rationnelle, ou expression régulière (traduction de l'anglais regular expression), est, en informatique,...
https://fr.wikipedia.org/wiki/Expression_rationnelle

Hors ligne

#8 Le 08/01/2016, à 16:06

tiramiseb

Re : [Résolu] équivalence

C'est un moche anglicisme.
l'expression n'est pas régulière, par contre elle est rationnelle.

Tu dis aussi "supporter" (de l'anglais "to support") au lieu de "soutenir" ?

« oui ma chérie, tous les jours je te supporte ! » roll

Hors ligne

#9 Le 09/01/2016, à 04:27

ar barzh paour

Re : [Résolu] équivalence

tiramiseb a écrit :
if [[ $deb = $modele ]]

Il te manque un "~"...

non non c'est bien l'égalité que je voulais utiliser
tu dis "pattern matching" , il faut que je recherche ce que ça veut dire plus précisement

mais ce que je lis dans mon bouquin (programmation shell sous unix/linux)
(concernant [[ chaine = modele ]] [[ chaine !=modele ]] [[ chaine1 <chaine2 ]] [[ chaine1 > chaine2 ]]
c'est

le tableau ci-dessous rappelle les caractères spéciaux utilisables dans les modèles de chaine de caractères
* 0 à n caractères
? 1 caractère quelconque
[abc] 1caractère qparmi ceux cités entre les crochets
[!abc] 1 caractère ne faisant pas partie des caractères cités

je n'ai rien concernant =~ , j'ai découvert cette syntaxe dans une discussion sur ce forum ,
on la retrouve bien dans man ou dans le guide bash

ce que je constate
[[ $chaine =~ $modele ]] est basé sur les une expression régulière
et pas [[ $chaine = $modele ]]
je marque résolu


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#10 Le 09/01/2016, à 11:00

tiramiseb

Re : [Résolu] équivalence

ce que je constate
[[ $chaine =~ $modele ]] est basé sur les une expression régulière
et pas [[ $chaine = $modele ]]

C'est exactement ça, comme le dit la manpage de bash.

Sauf qu'en français on dit « expression rationnelle » et non « expression régulière » (un mauvais anglicisme). cf mon message #8.

Hors ligne