[Megoldva] kisebb nagyobb feltétel - nem értem


#!/bin/bash
clear

echo 1 - 33
echo 2 - 34

if [[ 33 < 34 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi
echo -e " \n \r"
echo 1 - 33.0.1990.58
echo 2 - 33.0.1990.115

if [[ 33.0.1990.58 < 33.0.1990.115 ]]; then
echo "az első szám a kisebb"
else
echo "A 2. szám a nagyobb"
fi

Az eredmény:
1 - 33
2 - 34
az első szám a kisebb

1 - 33.0.1990.58
2 - 33.0.1990.115
A 2. szám a nagyobb

Mind a kettő eredmény helyes, de ez így szvsz nem konzekvens. Miért nem egyformán írta ki hogy az első szám a kisebb?
Ez egy verzió ellenőrzéshez kell egy scriptben, s természetesen a nagyobb szám a jobb.

Hozzászólások

Hülyeséget írtál a then és else ágakba. Az első szám a kisebb, illetve a második szám a nagyobb az egyenlőség esetétől eltekintve ugyanazt jelentik, viszont vagy a then, vagy az else ág fog lefutni. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Második esetben nem számokat hasonlítasz össze.

Üdv,
Marci

Uristen, ha az elso szam kisebb akkor mindket esetedben a masodik szam nagyobb, nem?? Csak akkor nem lehet a ket eredmeny ugyanabban az agban, ha a ket szam egyenlo.

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám

A test parancs ( még ez a formája is [[ ) csak egész számokkal működik, márpedig a második esetben az nem igazán egész szám.

Tovább megyek. Ha ezt a fajta operátor jelet akarod használni, használd a (( kifejezés )) formát bashban (és ne a fenti [[ kifejezés ]] alakot), és ha ilyen a.b.c.d jellegű izéket akarsz számként összehasonlítani, akkor használj Perl-t, abban legalább ez ismert, mint verziószám :-)

Lépjünk túl azon, hogy „az első szám a kisebb” és „A 2. szám a nagyobb” jelen esetben ugyanazt jelenti.

A „33.0.1990.58” és a „33.0.1990.115” nem számok, mert egy számban legfeljebb csak egy tizedes pont/vesző lehet.

Ettől függetlenül a bash-ban a „<” operátor stringeket hasonlít össze, és stringként a 115 kisebb mint az 58.
„When used with [[, the < and > operators sort lexicographically using the current locale.”

-----

(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Amit csinálni szeretnél, ahhoz neked a

sort -V

parancsról volna jó olvasgatnod. :)

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Így egyszerűbb:

#!/bin/bash

compver() {
    sort -VC <<<"$2"$'\n'"$1"
}

first_version='5.100.2'
second_version='5.1.2'
if compver "$first_version" "$second_version"; then
    echo "$first_version nagyobb vagy egyenlő, mint $second_version!"
else
    echo "$first_version kisebb, mint $second_version!"
fi

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Szerintem csak az zavar meg, hogy hibásan azt írod ki, hogy "a 2. szám a nagyobb", ahelyett, hogy a "a 2. szám a kisebb" (ráadásul ezek stringek, nem is számok.

(Nem vettem észre, hogy közben többen is válaszoltak)

kedvenckereső://bash+compare+version+numbers

Üdv,
Marci