1 Reply Latest reply on Dec 19, 2010 3:23 PM by Dude!

    syntax error near unexpected token `else'

    825118
      We are running IBM Websphere portal on our oracle env.

      I wrote a script to start portal in all environment.
      We have portal 1 & portal2 in different servers.
      Its start portal 1 (not a problem)
      Only getting following message:

      ./WebPortaltest.sh: line 56: syntax error near unexpected token `else'
      ./WebPortaltest.sh: line 56: `else'

      There is the else before second logic

      {}
      #
      else
      if [ "$host" == "prd6" ] || [ "$host" == "stg6" ] ||
      [ "$host" == "wprd6" ] || [ "$host" == "tst6" ]; {}


      Here is the whole script:
      {}
      #------------------> web_portal_start.sh <-------------------#
      # #
      # Modification log #
      # ---------------- #
      # #
      # ------Please add new entries at the top. Be proud #
      # | of your work. Comment it! #
      # V #
      # DATE WHO DESCRIPTION #
      # ---- --- ----------- #
      # 01/12/10 tst initial release to start portal #
      # #
      #-------------------------------------------------------------#
      #!/bin/bash
      set -x
      host=$(hostname);
      dt=$(date +'%D %T')
      logfile='PortalUp.log'
      profile_path='/opt/IBM/WebSphere/wp_profile'
      #
      #--> Determine which portal to use based on host name <--
      #--> set portal1 for host name prd5, stg5, <--
      # wprd5, tst5, <--
      # wstg5 or dev2 <--
      #
      #--> set portal2 for host name prd6, stg6, <--
      # wprd6, or tst6 <--
      #
      #portal_start='null';
      #
      if [ "$host" == "prd5" ] || [ "$host" == "stg5" ] ||
      [ "$host" == "wprd5" ] || [ "$host" == "tst5" ] ||
      [ "$host" == "wstg5" ] || [ "$host" == "dev2" ];
      then
      su -l admin -c /home/admin/scripts_PS/startportal & >> /tmp/weblog/$logfile
      echo $dt start command for $server_name on $host Server has been issued. >> /tmp/weblog/$logfile
      fi
      # check every 3 minutes to see if server has been started. if server does not start in 30 minutes (10 checks), exit the script with
      # return code 8
      let "count = 0"
      while [ $count -lt 11 ]
      do
      let "count = count +1"
      #
      dt=$(date +'%D %T')
      #
      if [ -f $profile_path/logs/$server_name/$server_name.pid ]; then
      echo $dt $server_name on $host server has been successfully started. >> /tmp/weblog/$logfile
      exit
      #
      else
      echo $dt start process for $server_name on $host server is still running. checked $count times, 3 minutes apart >> /tmp/weblog/$logfile
      sleep 180
      fi
      #
      else
      if [ "$host" == "prd6" ] || [ "$host" == "stg6" ] ||
      [ "$host" == "wprd6" ] || [ "$host" == "tst6" ];
      then
      su -l admin -c /home/admin/scripts_PS/startportal_2 & >> /tmp/weblog/$logfile
      echo $dt start command for $server_name on $host Server has been issued. >> /tmp/weblog/$logfile
      fi
      # check every 3 minutes to see if server has been started. if server does not start in 30 minutes (10 checks), exit the script with
      # return code 8
      let "count = 0"
      while [ $count -lt 11 ]
      do
      let "count = count +1"
      #
      dt=$(date +'%D %T')
      #
      if [ -f $profile_path/logs/$server_name/$server_name.pid ]; then
      echo $dt $server_name on $host server has been successfully started. >> /tmp/weblog/$logfile
      exit
      #
      else
      echo $dt start process for $server_name on $host server is still running. checked $count times, 3 minutes apart >> /tmp/weblog/$logfile
      sleep 180
      fi
      done
      #
      dt=$(date +'%D %T')
      echo $dt start process for $server_name on $host server DID NOT complete successfully. checked $count times, 3 minutes apart >> /tmp/weblog/$logfile
      exit 8
      #
      {\}


      Thanks
        • 1. Re: syntax error near unexpected token `else'
          Dude!
          You may want to put your script inside two {c o d e} delimiters, without the spaces, for better readability and to prevent certain text conversions.

          I wonder if your newlines break the if else syntax or if you may have exceeded the length of the if else syntax, perhaps depending on your shell. You could try to re-code as following, or try the case statement as in the example below:
          if [ "$host" == "prd5" ] || \
             [ "$host" == "stg5" ] || \
             [ "$host" == "wprd5" ] || \
             [ "$host" == "tst5" ] || \
             [ "$host" == "wstg5" ] || \
             [ "$host" == "dev2" ] ; then
             echo "catch"
          fi
          
          case $host in
          prd5|stg5|wprd5|tst5|wstg5|dev2) catch=catch ;;
          esac
          if [ "$catch" == "catch" ]; then
             echo "catch"
          fi
          Edited by: MaC on Dec 19, 2010 7:08 AM