#!/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.
- 1622 megtekintés
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
- A hozzászóláshoz be kell jelentkezni
Ráadásul :)
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
Azért nekem is sikerült hülyeséget írnom, csak már nem tudom javítani. Még csak az egyenlőség sem kivétel. Ezek ugyanazt jelentik. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Második esetben nem számokat hasonlítasz össze.
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni
Már az első esetben is stringeket hasonlít össze szerintem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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 :-)
- A hozzászóláshoz be kell jelentkezni
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]\.-
- A hozzászóláshoz be kell jelentkezni
Amit csinálni szeretnél, ahhoz neked a
sort -V
parancsról volna jó olvasgatnod. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Megoldottam:
compver() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
first_version=5.100.2
second_version=5.1.2
if compver $first_version $second_version; then
echo "$first_version nagyobb mint $second_version !"
fi
- A hozzászóláshoz be kell jelentkezni
Í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
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
kedvenckereső://bash+compare+version+numbers
Üdv,
Marci
- A hozzászóláshoz be kell jelentkezni