shell脚本中特定行结尾的命令未找到错误

时间:2016-07-07 10:57:49

标签: linux bash shell gnu

我的一个脚本中有以下代码。虽然脚本工作正常并产生预期的输出,但每次都会出现以下错误:

callHomeProperties.sh:line 154:1:找不到命令 callHomeProperties.sh:第160:1行:找不到命令

148    if [[ "$OS_VERSION_DB" = "$OS_VERSION_FILE" && "$DB_DETAILS_DB" = "$DB_DETAILS_FILE" && "$APP_SERVER_DB" = "$APP_SERVER_FILE" && "$AAOP_VERSION_DB" = "$AAOP_VERSION_FILE" && "$VMWARE_DB"         = "$VMWARE_FILE" ]]; then
149        echo "same entry for the customer updating the time stamp and the data date"
150        `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL
151        connect call_home/call_home@$ORASVC
152        update call_home_headers set LAST_UPDATED_DATE = sysdate where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$DB_DETAILS_DB' and APP_SERVER='$A        PP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB');
153        exit
154        endSQL`
155       `$ORACLE_HOME/bin/sqlplus -s /nolog <<endSQL
156        connect call_home/call_home@$ORASVC
157        update call_home_headers set DATA_DATE = TO_DATE('$DATA_DATE_FILE','yyyy/MM/dd HH/MI/SS') where (CUSTOMER_NAME='$CUSTOMER_NAME_FILE' and OS_VERSION='$OS_VERSION_DB' and DB_DETAILS='$        DB_DETAILS_DB' and APP_SERVER='$APP_SERVER_DB' and AAOP_VERSION='$AAOP_VERSION_DB' and VMWARE='$VMWARE_DB');
158
159        exit
160        endSQL`
161

有人可以帮忙吗?我已经尝试过dos2unix,假设它是一个问题,因为行结束,但是没有用。

由于

1 个答案:

答案 0 :(得分:1)

每个sqlplus命令都在反引号中,因此shell将尝试执行命令的输出。我猜测输出不是有效的shell,这就是它抱怨的原因。

简单的解决方法是删除反引号:

"$ORACLE_HOME"/bin/sqlplus -s /nolog <<endSQL
connect call_home/call_home@$ORASVC
update call_home_headers set LAST_UPDATED_DATE = sysdate where (...);
endSQL

清除$ORASVC和您使用的其他变量可能是一个好主意,除非它们来自可靠来源(即非用户输入)并且不包含对SQL有意义的任何内容,否则您有一堆SQL注入漏洞等待被利用。