2017-02-10 5 views
0

In meinem benutzerdefinierten Bash-Skript für die Serverüberwachung, die mich tatsächlich in meinem CentOS-Server nimmt einige Aktionen zu zwingen und warnen, wenn Ressourcen mehr Zeit als erwartet überlastet sind, bekomme ich folgende FehlerVergleich Gleitkommazahlen in bash

Linie 17: [: 5,74: integer Ausdruck *

Nun sind alle iostat Ergebnisse sind float-Zahlen per Definition zu erwarten, und ich habe bereits awk in meinem iostat-Befehl (WAIT) verwendet wird, so wie kann ich meine bash-Skript machen einen statt einer ganzen Zahl erwarten?

** Wert 5,74 stellt aktuelle iostat Ergebnis

#!/bin/bash 

if [[ "`pidof -x $(basename $0) -o %PPID`" ]]; then 
#  echo "Script is already running with PID `pidof -x $(basename $0) -o %PPID`" 
     exit 
fi 

UPTIME=`cat /proc/uptime | awk '{print $1}' | cut -d'.' -f1` 
WAIT=`iostat -c | head -4 |tail -1 | awk '{print $4}' |cut -d',' -f1` 
LOAD=`cat /proc/loadavg |awk '{print $2}' | cut -d'.' -f1` 

if [ "$UPTIME" -gt 600 ] 
then 
     if [ "$WAIT" -gt 50 ] 
     then 
       if [ "$LOAD" -gt 4 ] 
       then 
         #action to take (reboot, restart service, save state sleep retry) 
         MAIL_TXT="System Status: iowait:"$WAIT" loadavg5:"$LOAD" uptime:"$UPTIME"!" 
         echo $MAIL_TXT | mail -s "Server Alert Status" "[email protected]" 
         /etc/init.d/httpd stop 
#      /etc/init.d/mysql stop 
         sleep 10 
#      /etc/init.d/mysql start 
         /etc/init.d/httpd start 
       fi 
     fi 
fi 

CentOS Release 6.8 (Final) 2.6.32-642.13.1.el6.x86_64

+0

Bash hat nur Ganzzahl Mathe; Sie müssen ein anderes Werkzeug als bash (wie awk) verwenden, um Fließkomma zu machen. –

+0

Dies ist jedoch einfacher (viel einfacher!), Weil Sie mit ganzzahligen Konstanten vergleichen. –

+0

BTW, Floating-Point-Mathematik in bash im Allgemeinen zu tun ist [BashFAQ # 22] (http://mywiki.wooledge.org/BashFAQ/022). –

Antwort

1

Normalerweise würden Sie etwas anderes verwenden müssen als native Shell-Mathe, wie in BashFAQ #22 beschrieben. Da Sie jedoch mit Ganzzahlen vergleichen, ist dies ganz einfach: Sie können den Dezimalpunkt einfach abschneiden.

[ "${UPTIME%%.*}" -gt 600 ] # truncates your UPTIME at the decimal point 
[ "${WAIT%%.*}" -gt 50 ] # likewise 
Verwandte Themen