加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux Script嵌套if语句给出语法错误

发布时间:2020-12-14 00:51:50 所属栏目:Linux 来源:网络整理
导读:我试图嵌套多个if语句如下: #!/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=$(t
我试图嵌套多个if语句如下:

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

然而它给我语法投诉说:

意外标记’fi’附近的语法错误

在最后一个’fi’

有谁知道为什么?

谢谢.

[编辑]已发布完整代码.

解决方法

你有一个else语句和fi语句,在44-46行之间没有任何内容(只是它们之间的注释).在bash中,你需要在else块的主体中??有一些语句,或者取出else块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读