2016-03-29 12 views
1

Ich habe versucht zu lernen, wie man ein Bash-Skript schreibt, um ein eigenes Skript zum Starten und Stoppen eines Tomcat-Servers zu bekommen, und ich kann nicht finden, was den Fehler verursacht in diesem Skript. Ich habe meine if und fi Aussagen überprüft, um sicherzustellen, dass sie übereinstimmen, aber immer noch keine Ahnung haben, was falsch ist.OS X Bash Script: Syntaxfehler: unerwartetes Ende der Datei

EDIT: Hier ist die genaue Fehlermeldung

line 87: syntax error: unexpected end of file

Hier ist das Skript:

#!/bin/bash 

#Returns the process id of the Tomcat server if currently running 
function tomcat_pid { 
     local pid=0 
     local temp=$(ps x | grep "$CATALINA_HOME" | grep -v grep | cut -d ' ' -f 1) 

     if [ -n "$temp" ]; then 
       pid=$temp 
     fi 
     echo "$pid" 
}#tomcat_pid 

#Checks the status of the Tomcat Server 
function tomcat_status { 
     local retval="Tomcat Server is not currently running" 

     local pid 
     pid=$(tomcat_pid) 

     if [ "$pid" -gt 0 ]; then 
       retval="Tomcat Server is running at pid: $pid" 
     fi 

     echo "$retval" 
}#tomcat_status 

#Starts the Tomcat Server 
function tomcat_start { 
     local pid 
     pid=$(tomcat_pid) 

     if [ "$pid" -gt 0 ]; then 
       echo "Tomcat Server already running at pid: $pid" 
     else 
       echo "Starting Tomcat Server" 
       "$CATALINA_HOME/bin/startup.sh" 
     fi 
}#tomcat_start 

#Stops the Tomcat Server 
function tomcat_stop { 
     local pid 
     pid=$(tomcat_pid) 

     if [ "$pid" -gt 0 ]; then 
       echo "Shutting down Tomcat Server" 
       "$CATALINA_HOME/bin/shutdown.sh" 
     else 
       echo "Tomcat Server is not currently running" 
     fi 
}#tomcat_stop 

#Restarts the Tomcat Server 
function tomcat_restart { 
     local pid 
     pid=$(tomcat_pid) 
     if [ "$pid" -gt 0 ]; then 
       echo "Restarting the Tomcat Server" 
       "$CATALINA_HOME/bin/shutdown.sh" 
       sleep 5s 
       "$CATALINA_HOME/bin/start.sh" 
     else 
       echo "Starting the Tomcat Server" 
       "$CATALINA_HOME/bin/startup.sh" 
     fi 
}#tomcat_restart 

if [ -n "$1" ]; then 
     if [ "$1" = 'restart' ]; then 
       tomcat_restart 
     #tomcat start - Starts the Tomcat Server 
     elif [ "$1" = 'start' ]; then 
       tomcat_start 
     #tomcat shutdown - Shuts down the Tomcat Server 
     elif [ "$1" = 'shutdown' ]; then 
       tomcat_stop 
     #tomcat status - Checks the status of the tomcat server 
     elif [ "$1" = 'status' ]; then 
       tomcat_status 
     else 
       echo "Please use correct options" 
     fi 
else 
     echo "Please use correct options" 
fi 
+2

Sie brauchen ein Leerzeichen zwischen den '}' und '#' für die Kommentare. – 123

+0

Sie haben die relevante Antwort (als Kommentar). Beobachtung: "Bitte verwenden Sie die richtigen Optionen" ist sehr wenig hilfreich, wenn Sie den Befehl 6 Monate später verwenden und sich nicht mehr erinnern können, welche Optionen korrekt sind. Sie sollten eine Zusammenfassung der korrekten Verwendung melden, um den Speicher des Benutzers zu durchsuchen. Beispiel: echo Verwendung: $ 0 {restart | start | shutdown | status} "> & 2; exit 1 'meldet die Verwendung eines Standardfehlers und stellt sicher, dass das Skript einen Fehlerstatus meldet ("exit 0" zeigt Erfolg an). –

+0

Skripte zum Starten und Stoppen von Diensten sind nicht wirklich eine gute Übung für Anfänger und sinnlos, wenn Sie kein Anfänger sind. – tripleee

Antwort

1

Siehe man bash, mit anderen Worten bash(1) Abschnitt SHELL Gammar

{ list; } 
      list is simply executed in the current shell environment. list must be terminated with a newline or semi‐ 
      colon. This is known as a group command. The return status is the exit status of list. Note that unlike 
      the metacharacters (and), { and } are reserved words and must occur where a reserved word is permitted to 
      be recognized. Since they do not cause a word break, they must be separated from list by whitespace or 
      another shell metacharacter. 

Der letzte Satz zeigt auf Ihr Problem.

+1

Nein, der letzte Satz erklärt, warum es ein Leerzeichen * vor * dem schließenden '}' gibt. – tripleee

+0

grundsätzlich ja, aber ein Shell-Skript ist eine große 'list;' auf der Hauptebene. – ikrabbe

Verwandte Themen