2016-03-29 12 views
1

私は自分自身のスクリプトを起動してTomcatサーバーを停止するためにbashスクリプトを書く方法を学びましたが、エラーの原因を見つけることができません。このスクリプトでは私は自分のiffiのステートメントを二重にチェックして、それらが一致することを確認しましたが、何が間違っているかはまだ分かりません。 EDITOS X Bashスクリプト:構文エラー:予期しないファイルの末尾

#!/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

コメントのために '}'と '#'の間にスペースが必要です。 – 123

+0

あなたは関連する回答を(コメントとして)得ています。観察:「正しいオプションを使用してください」は、6ヵ月後にコマンドを使用し、正しいオプションが何であるかを覚えていないと大いに役に立たない。正しい使用法の概要を報告して、ユーザーのメモリをジョグする必要があります。たとえば、 'echo"使用法:$ 0 {restart | start | shutdown | status} ">&2; exit 1'は標準エラーの使用状況を報告し、スクリプトがエラー状態を報告することを保証する( 'exit 0'は成功を示す)。 –

+0

サービスを開始したり停止したりするスクリプトは初心者にとっては本当に良いエクササイズではなく、初心者でないときには無意味です。 – tripleee

答えて

1

man bashを参照してください、つまりbash(1)、第SHELLガンマー

{ 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. 
中:ここ は、スクリプト正確なエラーメッセージ

ここ

line 87: syntax error: unexpected end of file

されています

最後の文があなたの問題を指しています。

+1

いいえ、最後の文では、なぜ*が閉じる前にスペースがあるのか​​を説明しています。 – tripleee

+0

は基本的にはyesですが、シェルスクリプトはメインレベルで大きな 'list;'です。 – ikrabbe

関連する問題