Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Johny_servis 26. 11. 2014, 14:26:50

Název: Porovnání desetinných čísel v bashi
Přispěvatel: Johny_servis 26. 11. 2014, 14:26:50
Ahoj

Potřebuji porovnat 2x dvě desetinná čísla a pokud budou obě dvě větší než nastavená úroveň, tak se provede "then" blok za podmínkou if, jinak pokračuje dále ve skriptu. Zkoušel jsem už všechno možné - nakonec jsem dospěl k této variantě:

Kód: [Vybrat]
#!/bin/bash
A=14.9
B=27

if [[ $(("$A >= 15.0" | bc -l)) && $(("$B >= 15.0" | bc -l)) ]]; then
...
fi

V tomto konkrétním případě by se blok "then" neměl provést, protože nebude splněna podmínka (A je totiž menší než 15). Výstupem ale je:
"14.9 >= 15.0" | bc -l: syntax error: operand expected (error token is ""14.9 >= 15.0" | bc -l")

Zkoušel jsem už různě měnit závorky a uvozovky systémem pokus-omyl, ale nedošel jsem k výsledku. Neví prosím někdo jak takový problém vyřešit ? (dokud jsem používal celá čísla tak to fungovalo, ale potřebuji právě desetinná)

Děkuji
Název: Re:porovnání dvou desetinných čísel v bash
Přispěvatel: Jakub L. 26. 11. 2014, 14:39:11
Mně to funguje

jakub@aman:~$ echo "14.9<=15" | bc -l
1
jakub@aman:~$ echo "14.9>=15" | bc -l
0

bc 1.06.95

3.16.0-4-amd64 #1 SMP Debian 3.16.7-2 (2014-11-06) x86_64
Název: Re:Porovnání desetinných čísel v bashi
Přispěvatel: randolf 26. 11. 2014, 15:08:00
if (( $(bc <<< "$a > $b") == 1 ))
Název: Re:Porovnání desetinných čísel v bashi
Přispěvatel: Johny_servis 27. 11. 2014, 08:31:24
Díky moc, už to funguje. Celá konstrukce teď u mě vypadá takto:

Kód: [Vybrat]
if [[ $(bc <<< "$A >= 15.0") == 1 ]]&&[[ $(bc <<< "$B >= 15.0") == 1 ]]; then
...
fi
Název: Re:Porovnání desetinných čísel v bashi
Přispěvatel: Pavel Tisnovsky 27. 11. 2014, 12:17:48
Klidne si muzes i to && prehodit do BC, protoze ten logicke spojky umi.