如果不如预期那样简单

时间:2019-03-30 00:59:51

标签: shell sh

使用此代码:

#!/bin/sh
DBVALUE=$(/opt/mssql-tools/bin/sqlcmd -S server -UUser -P"Password" -dDatabase -Q"SELECT something from table WHERE this = "that" | grep yes)
echo "$DBVALUE"
if [ "$DBVALUE" != "yes" ]
then
  echo "no"
  exit 0
else
  echo "yes"
fi

echo DBVALUE返回“是” if-then返回“否”

如果我用DBVALUE =“ yes”换出SQL查找,则if-then返回“ yes”

为什么SQL查询中的DBVALUE结果为“ yes”,如果在if-else中不返回yes?

2 个答案:

答案 0 :(得分:1)

好像在sql查询的末尾缺少双引号。另外,通过在“ that”周围使用未转义的双引号,查询和该脚本中随后的所有内容都可能无法按预期执行。

解决方案是用反斜杠转义双引号。

DBVALUE=$(/opt/mssql-tools/bin/sqlcmd -S server -UUser -P"Password" -dDatabase -Q"SELECT something from table WHERE this = \"that\"" | grep yes)

答案 1 :(得分:0)

我终于发现数据库结果中包含大量空格,因此“ yes”不等于“ yes”。

我去除了空格: DBV =“ $(echo” $ DBVALUE“ | tr -d'[:space:]')”

测试成功!

正如Tripleee指出的,我可以使用一个标志来删除空格: DBVALUE = $(/ opt / mssql-tools / bin / sqlcmd -S服务器-UUser -P“密码” -dDatabase -Q“从表中选择某些内容WHERE this ='that'” -W | grep yes)