2016-11-21 4 views
0

Dies ist nur ein Beispiel für die Art von was ich versuche zu tun. Grundsätzlich habe ich Skript, das Code in einer if Anweisung je nach der Version von MySQL ausführen muss. Um zu testen, habe ich das unten. Ich weiß Bash wird nicht schwimmt, also würde ich awk verwenden. Kann jemand helfen, damit das funktioniert?Float in bash mit awk

#!/bin/bash 

var=5.5 
mysqlV=5.6 

if awk '{print $var > $mysqlV}'; then 
result=1 
else 
result=0 
echo $result 
fi 
+0

Versionsnummern sind in der Regel nicht, Gleitkommawerte. Sie sind mehrere ganze Zahlen, die durch Punkte verbunden sind, zum Beispiel 5.6.1. – chepner

+0

Ich weiß, dass ich eine Variable habe, die es abschneidet 'MYSQL_VER = $ (mysql -V | awk '{print $ 5}' | Schnitt -d ',' -f1 | Schnitt -c-3)' – eekfonky

Antwort

1

Anstelle der Verwendung von awk Sie den Bash-Rechner verwenden könnten (bc) auf folgende Weise:

var=5.5 
mysqlV=5.6 

a=`echo $var'>'$mysqlV | bc -l` 

echo $a 
> 0 

var=5.8 
a=`echo $var'>'$mysqlV | bc -l` 

echo $a 
> 1 
4

Zum Vergleich Schwimmer mit awk, bash und verschiedenen Rückgabecodes:

var="5.5" 
mysqlV="5.6" 

if awk -v var="$var" -v mysqlV="$mysqlV" 'BEGIN{if (var>mysqlV) exit 0; else exit 1}'; then 
    echo "larger" 
else 
    echo "smaller" 
fi 

Ausgabe:

smaller 

Kürzere Version:

if awk -v var="$var" -v mysqlV="$mysqlV" 'BEGIN{exit(var>mysqlV)?0:1}'; then