noober
noober

Reputation: 1505

bash script - unable to evaluate variable to string correctly

Trying to debug my bash script. What's wrong with my syntax here? I'm trying to evaluate a parameter entered by the user and based on that run one of my IF-THEN statements. However, I'm getting a command not found.

Here's my script thus far:

if [[ $# != 4 ]]; then
   echo "Usage: ./test.sh <ABC|XYZ> <owner> <db> <TARGETHOST>" 2>&1
   exit 1
fi

case $1 in
    ABC|XYZ)
       filename="get-$1.sql"
       ;;
    *)echo "Must enter ABC or XYZ"
      exit 1
      ;;
esac

export OWNER=$2
export DB=$3
export HOST_NM=$4
export PORT=5432
export LOG="test-$1.log"
PSQL=`which psql`


if [[$1=="ABC"]]; then
      RUNCLI=$("$PSQL" -h $HOST_NM -p $PORT -U $OWNER $DB -F $'\t' --no-align -f get-$1.sql | tee >> $LOG)
      exit 1
   else
      echo "Error running report ..."
fi

if [[$1=="XYZ"]]; then
      RUNCLI2=$("$PSQL" -h $HOST_NM -p $PORT -U $OWNER $DB -a -f get-$1.sql | tee >> $LOG)
      exit 1
   else
      echo "Error running report ..."
fi

Error:

./test.sh: line 41: [[XYZ==ABC]]: command not found
Error running report ...
./test.sh: line 51: [[XYZ==XYZ]]: command not found
Error running report ...

Upvotes: 0

Views: 321

Answers (1)

Rambo Ramon
Rambo Ramon

Reputation: 1034

Although the question is already answered in the comment section I want to give an answer and share some knowledge which is not obvious (at least it was not for me).

The if in bash just checks the return code of the following command, which means that instead of if [ condition ]... or if [[ condition ]]... you could also write if ./configure && make.... [ and [[ are commands or shell-built-ins, respectively, as well and not part of the if syntax. An which [ for instance returns /bin/[. At this point it is obvious that you need spaces between the brackets and the condition since it is just just a set of parameters passed to a command.

If you have this in mind, you will never forget the spaces again.

Upvotes: 1

Related Questions