bash脚本 - 无法正确评估变量到字符串

时间:2015-06-22 22:41:34

标签: bash unix

尝试调试我的bash脚本。这里我的语法有什么问题?我试图评估用户输入的参数,并根据该IF-THEN语句运行一个参数。但是,我找不到命令。

到目前为止,这是我的剧本:

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

错误:

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

1 个答案:

答案 0 :(得分:1)

虽然问题已在评论部分得到解答,但我想给出答案并分享一些不明显的知识(至少不适合我)。

bash中的if只检查以下命令的返回代码,这意味着您可以编写if [ condition ]...而不是if [[ condition ]]...if ./configure && make...[[[分别是命令或shell-built-ins,而不是if语法的一部分。例如which [会返回/bin/[。 此时很明显,在括号和条件之间需要空格,因为它只是传递给命令的一组参数。

如果你有这个想法,你永远不会忘记这些空间。