2011-11-18 3 views
4

Я пытаюсь гнездо кратного если-заявление, как:Linux Script Вложенного если-заявление дает ошибку синтаксиса

#!/bin/bash 
# start_server.sh 
# 
# Use this script to start the MarketDataTransmitter. 
# 
# Usage: ./start_server.sh Starts the MarketDataTransmitter. 

reset=$(tput sgr0) 
red=$(tput setaf 1) 
green=$(tput setaf 2) 
yellow=$(tput setaf 3) 
cyan=$(tput setaf 6) 
echo 
directory=$(ls -l) 
check_exist=$(awk -v a="$directory" -v b="MarketDataTransmitter" 'BEGIN { print index(a, b) }') 
if [ "$check_exist" = "0" ]; then 
    # MarketDataTransmitter is not present. 
    echo "${red}[ERROR]${reset} Could not start ${yellow}MarketDataTransmitter${reset}." 
    echo "  ${yellow}MarketDataTransmitter${reset} could not be found." 
else 
    # MarketDataTransmitter is present. 
    processes=$(ps -ef | grep -i "MarketDataTransmitter" | grep -v "grep" | grep -v "bash" | awk '{ print $8 }') 
    check_run=$(awk -v a="$processes" -v b="MarketDataTransmitter" 'BEGIN { print index(a, b) }') 
    if [ "$check_run" = "0" ]; then 
    # MarketDataTransmitter is not running. 
    if [ -e "srv.log" ]; then 
     if [ -s "srv.log" ]; then 
     if [ -d "logs" ]; then 
      date_time=$(date '+%Y%m%d_%H_%M_%S') 
      new_log_name="srv_$date_time.log" 
      mv srv.log $new_log_name 
      mv $new_log_name logs 
     else 
      mkdir logs 
      date_time=$(date '+%Y%m%d_%H_%M_%S') 
      new_log_name="srv_$date_time.log" 
      mv srv.log $new_log_name 
      mv $new_log_name logs 
     fi 
     else 
     echo "srv.log is empty and will be removed." 
     rm -rf srv.log 
     fi 
    else 
     # No srv.log but this is to start MarketDataTransmitter so we can ignore. 
    fi 
    ./MarketDataTransmitter > srv.log & 
    echo "${yellow}MarketDataTransmitter${reset} has been started." 
    else 
    # MarketDataTransmitter is already running. 
    echo "${red}[ERROR]${reset} Could not start ${yellow}MarketDataTransmitter${reset}." 
    echo "  ${yellow}MarketDataTransmitter${reset} is already running." 
    fi 
fi 
echo 

Однако это дает мне синтаксические жалобы говоря:

ошибки синтаксиса около неожиданной лексемы `фи»

на последней „фи“

кто-нибудь знает, почему?

Спасибо.

[EDIT] Полный код сохранен.

+2

Можете ли вы опубликовать свой фактический код? Скорее всего, у вас есть синтаксическая ошибка из-за отсутствия одного из операторов 'then' или слишком много' fi 'или что-то подобное. – Jarek

+0

Hi Jarek, спасибо за быстрый ответ. Полный код опубликован. – czchlong

ответ

6

У вас есть заявление else и заявление fi, в котором нет ничего между ними по строкам 44-46 (просто комментарий между ними). В bash вам нужно иметь какое-то утверждение в теле этого блока else или блокировать else.

+0

Большое спасибо Яреку. – czchlong

Смежные вопросы