使用此代码:
#!/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?
答案 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)