Bonjour,
je dispose de deux variables VERSION_CLIENT et VERSION_APPLI contenant des numéros de versions.
Je dois comparer ces numéros de versions et cela me pose problème.
En effet, la comparaison bash se fait selon l'ordre lexicographique et mes versions sont de la forme:
x.yz
ou x et y sont des entiers (en gros le majeur et le mineur)
et z est une lettre (release)
Donc bon, j'avais bien une solution à la base du style:
[code]
if [[ $VERSION_CLIENT > $VERSION_APPLI ]]
then
echo "le bon traitement ici"
fi
[/code]
Oui, ça va pas chercher bien loin et effectivement, c'est loin de marcher pour tous les cas...
En effet, si le majeur (le x) devient supérieur à 9, on entre dans des problème lors de la comparaison. Si on compare 9.2a et 10.2a, la comparaison lexicographique va voir que 9 est plus grand que 1 et ça va donc foirer.
L'idée, c'est de découper le tout selon 3 variable et de les comparer une à une. Donc en gros, avant le '.', ça serait la variable majeure, ensuite avant que une lettre apparaisse (je sais, normalement elle est en deuxième position, après le point mais autant que ça soit évolutif), ça serait la variable mineure, et enfin la lettre serait la release.
J'ai voulu utiliser awk et sed pour faire ça, mais j'arrive pas du tout. Je vois pas comment les utiliser et je commence à devenir fou, alors que ça me semble être pas trop trop chaud. Mais je débute vraiment avec ces deux outils, si quelqu'un pouvait me donner une piste...
Merci d'avance!
# Re
Posté par LaBienPensanceMaTuer . Évalué à 0.
[^] # Re: Re
Posté par tangrop . Évalué à 0.
[^] # Re: Re
Posté par Guillaume Rossignol . Évalué à 1.
# re
Posté par Fab . Évalué à 4.
VERSION=2.3a; echo ${VERSION%%.*}
VERSION=2.3a; echo ${#VERSION}
VERSION=2.3a; ((nb=${#VERSION}-1)); echo ${VERSION:$nb}
VERSION=2.3a; echo ${VERSION##*.}
VERSION=2.30a; chaine=${VERSION##*.}; ((nb=${#chaine}-1)); echo ${chaine:0:$nb}
var1=7; var2=4; if [ $var1 -gt $var2 ]; then echo "var1 plus grand que var2"; fi
[^] # Re: re
Posté par tangrop . Évalué à 2.
# Solution
Posté par tangrop . Évalué à 1.
Et à l'exécution, je me prends un:
J'ai vraiment aucune idée... je vois pas ce qui est mal fait, ma découpe fonctionne pourtant...
PS: Je sais, ma variable release ferait mieux de s'appeler revision mais bon, de là ne vient pas le problème.
[^] # Re: Solution
Posté par Undefined8000 . Évalué à 2.
[^] # Re: Solution
Posté par tangrop . Évalué à 2.
Pour me faire pardonner, voilà un truc qui marche pour déterminer si deux numéros de versions sont différents et de lancer un traitement le cas échéant.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.