2016-08-09 2 views
2

Ich muss überprüfen, ob Tomcat 8 läuft oder nicht. Dazu benutze ich das folgende Skript.centos 7 -eq: unärer Operator erwartet

#!/bin/bash 

statuscode=$(wget --server-response http://localhost:8080 2>&1 | awk '/^ HTTP/{print $2}') 

if [ $statuscode -eq 200 ] 
then 
    echo "TOMCAT OK" 
    exit 0 
else 
    echo "TOMCAT CRITICAL" 
    exit 2 
fi 

Als ich das Skript auf CentOS laufen 7.

Wenn Tomcat 8 Skript ausgeführt wird dann ohne Fehler ausgeführt wird.

Wenn Tomcat 8 gestoppt dann mit Skript ausgeführt Fehlern folgenden

line 5: [: -eq: unary operator expected 

Bitte helfen Sie mir, dieses Problem zu beheben.

+1

werfen Dies liegt daran, '$ statuscode' seltsam mit einem leeren String oder etwas bevölkert zu bekommen. Versuchen Sie zu debuggen, indem Sie die Variable vor der Bedingung 'if' echo'en. – fedorqui

+0

@fedorqui ja wenn tomcat gestoppt $ statuscode ist leer. Wie kann ich damit umgehen? – user3441151

+0

können Sie vorher einen leeren Variablen-Check hinzufügen. –

Antwort

2

Überprüfen Sie, ob die Variable nicht leer ist, bevor Sie sie mit der erwarteten Ausgabe vergleichen.

#!/bin/bash 

statuscode=$(wget --server-response http://localhost:8080 2>&1 | awk '/^ HTTP/{print $2}') 

if [ -n "$statuscode" ] && [ $statuscode -eq 200 ] 
then 
    echo "TOMCAT OK" 
    exit 0 
else 
    echo "TOMCAT CRITICAL" 
    exit 2 
fi 
+0

Wenn mein Tomcat 8-Dienst läuft, dann würde "wget ​​--server-response http: // localhost: 8080 2> & 1 | awk"/^ HTTP/{print $ 2} '"mir immer 200 oder etwas anderes geben? – user3441151

+0

Es sollte eine bessere Möglichkeit geben zu überprüfen, ob ein Dienst läuft oder nicht. Wie ein 'systemctl'-Befehl –

0

versuchen Sie dies;

wenn Statuscode leer dann -eq: unary operator expected

#!/bin/bash 
{ 
statuscode=$(wget --server-response http://localhost:80 2>&1 | awk '/^ HTTP/{print $2}') 

if [ -z "$statuscode" ] 
then 
echo "TOMCAT CRITICAL"; 
exit 2; 
else 
    if [ $statuscode -eq 200 ] 
    then 
    echo "TOMCAT OK"; 
    exit 0; 
    fi 
fi 
}