Porovnání desetinných čísel v bashi

Porovnání desetinných čísel v bashi
« kdy: 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
« Poslední změna: 26. 11. 2014, 14:51:17 od Petr Krčmář »


Jakub L.

Re:porovnání dvou desetinných čísel v bash
« Odpověď #1 kdy: 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

randolf

Re:Porovnání desetinných čísel v bashi
« Odpověď #2 kdy: 26. 11. 2014, 15:08:00 »
if (( $(bc <<< "$a > $b") == 1 ))

Re:Porovnání desetinných čísel v bashi
« Odpověď #3 kdy: 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

Pavel Tisnovsky

Re:Porovnání desetinných čísel v bashi
« Odpověď #4 kdy: 27. 11. 2014, 12:17:48 »
Klidne si muzes i to && prehodit do BC, protoze ten logicke spojky umi.