Learn Bash and SQL by Building a Bike Rental Shop — syntax error for 'fi'

Hello — am currently stuck on the following unit in the Learn Bash and SQL by Building a Bike Rental Shop lesson:

The variable will be t or empty. Below the if not available comment, add an if condition that checks if it’s empty. Put the send to main menu comment in it’s statements area.

Here is what I have —

#!/bin/bash
PSQL="psql -X --username=freecodecamp --dbname=bikes --tuples-only -c"

echo -e "\n~~~~~ Bike Rental Shop ~~~~~\n"
MAIN_MENU() {
  if [[ $1 ]]
  then
    echo -e "\n$1"
  fi
  echo How may I help you?
  echo -e "\n1. Rent a bike\n2. Return a bike\n3. Exit"
  read MAIN_MENU_SELECTION
  case $MAIN_MENU_SELECTION in
    1) RENT_MENU ;;
    2) RETURN_MENU ;;
    3) EXIT ;;
    *) MAIN_MENU "Please enter a valid option." ;;
  esac

}

RENT_MENU() {
  # get available bikes
  AVAILABLE_BIKES=$($PSQL "SELECT bike_id, type, size FROM bikes WHERE available = TRUE ORDER BY bike_id")

  # if no bikes available
  if [[ -z $AVAILABLE_BIKES ]]
  then
    # send to main menu
    MAIN_MENU "Sorry, we don't have any bikes available right now."
    
  else
    # display available bikes
    echo -e "\nHere are the bikes we have available:"
    echo "$AVAILABLE_BIKES" | while read BIKE_ID BAR TYPE BAR SIZE
    do
      echo "$BIKE_ID) $SIZE\" $TYPE Bike"
    done

    # ask for bike to rent
    echo -e "\nWhich one would you like to rent?"
    read BIKE_ID_TO_RENT

    # if input is not a number
    if [[ ! $BIKE_ID_TO_RENT =~ ^[0-9]+$ ]]
    then
      # send to main menu
      MAIN_MENU "That is not a valid bike number."
    else
      # get bike availability
      BIKE_AVAILABILITY=$($PSQL "SELECT available FROM bikes WHERE bike_id = $BIKE_ID_TO_RENT AND available = TRUE")
      echo $BIKE_AVAILABILITY

      # if not available
      
      if [[ -z $BIKE_AVAILABILITY ]]
      then
        # send to main menu
      fi
    
      # send to main menu


    # send to main menu
  fi
  # send to main menu
fi
}

RETURN_MENU() {
  echo Return Menu
}

EXIT() {
  echo -e "\nThank you for stopping in.\n"
}

MAIN_MENU

And here is the error message I receive when I attempt to run the script —


~~~~~ Bike Rental Shop ~~~~~

./bike-shop.sh: line 59: syntax error near unexpected token `fi'
./bike-shop.sh: line 59: `      fi'

thanks for any help you can provide! I am pulling my hair out. I even checked against the hint, and my if statement seems (to me) to match theirs, which is :

if [[ -z $BIKE_AVAILABILITY ]]
then
  # send to main menu
fi

I have to wonder if it’s the spacing with your final fi’s within the RENT_MENU function that are causing the Bash compiler to error.

Oops figured it out — realized I had added too many comments with # send to main menu. Your reply helped nudge me to comb through and find this issue! Thanks so much @marcusparsons

1 Like

Awesome! Happy Coding!

1 Like