Sql 为什么它在终端中工作,而在我的shell脚本中不工作?

Sql 为什么它在终端中工作,而在我的shell脚本中不工作?,sql,linux,if-statement,sh,nagios,Sql,Linux,If Statement,Sh,Nagios,我正在检查一个数据库表以确定是否上载了特定的文件。每当完成上载这些文件的任务并在linux服务器上运行脚本时,此源日期就会更改。我想在星期四时提供一个警告,并且源日期是较早的日期。当该角色的人员在该日期后未完成任务时,应提供关键消息。当文件在星期四或更晚的日期上载时,消息是OK的 我已经在终端上运行了这个程序,输出结果是正确的,但在我的shell脚本中执行时不一样: #! /bin/sh STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKN

我正在检查一个数据库表以确定是否上载了特定的文件。每当完成上载这些文件的任务并在linux服务器上运行脚本时,此源日期就会更改。我想在星期四时提供一个警告,并且源日期是较早的日期。当该角色的人员在该日期后未完成任务时,应提供关键消息。当文件在星期四或更晚的日期上载时,消息是OK的


我已经在终端上运行了这个程序,输出结果是正确的,但在我的shell脚本中执行时不一样:

#! /bin/sh
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
#
#
LEVEL_WARNING=1
LEVEL_CRITICAL=2
#
#
script_name=$(basename $0)
output_file='/tmp/fs'
TEMP_DIR='/tmp'
SQL_USER='<USERNAME>'
SQL_SCHEMA='<PASSWORD>'
DATE=$(date +"%d-%^b-%y")
TODAY=$(date +"%u")
LAST=$(date --date="last thursday" +"%d-%^b-%y") 
#LAST='14-JUN-18'
THIS=$(date --date="this thursday" +"%d-%^b-%y")
exit_code=$STATE_OK
exit_string=''
free_space=0

# Check that the sanctions are up-to-date
function check_fs {
    touch "$TEMP_DIR"/"$script_name".sql
        if [ $? != 0 ]
        then
            echo 'Unable to create sql command file'
        exit "$STATE_CRITICAL"
    fi
    echo 'SET HEADING OFF'                                                                  >"$TEMP_DIR"/"$script_name".sql
    echo 'SET SPACE 0'                                                                      >>"$TEMP_DIR"/"$script_name".sql
    echo 'SET NEWPAGE 0'                                                                    >>"$TEMP_DIR"/"$script_name".sql
    echo 'SELECT SOURCE_DATE'                                                               >>"$TEMP_DIR"/"$script_name".sql
    echo 'FROM <TABLE>'                                                         >>"$TEMP_DIR"/"$script_name".sql
    echo 'WHERE ROWNUM = 1;'                                                                >>"$TEMP_DIR"/"$script_name".sql
    echo 'exit;'                                                                            >>"$TEMP_DIR"/"$script_name".sql 

    sqlplus -S $SQL_USER/$SQL_SCHEMA  @"$TEMP_DIR"/"$script_name".sql >$output_file
    sql_result="$(cat $output_file)"
    #sql_result="27-JUN-18"
    #TODAY="3"
    set -x

    # If the source_date isn't equal to the last Thursday date or if the source_date is less than last Thursday date or if today is Thursday
    if [ "$sql_result" = "$DATE" ] && [ "$TODAY" = "4" ];
    then
        echo 'OK - The source_date is on the ('$sql_result'). Today is ('$DATE').'
        exit "$STATE_OK"
    elif [ "$sql_result" > "$LAST" ];
    then
        echo 'OK - The source_date is on the ('$sql_result'). Today is ('$DATE').'
        exit "$STATE_OK"
    elif [ "$TODAY" = "4" ] && [ "$sql_result" != "$DATE" ];
    then
        echo 'WARNING - The source date is ('$sql_result') on the table. Please perform the steps for the FSL.'
        echo 'Last Thursday was ('$LAST').'
        exit "$STATE_WARNING" > /tmp/out 2>/tmp/err
    else
        echo 'CRITICAL - The source date is ('$sql_result') on the table! Please update the FSL as soon as possible!! The FS should have been completed on the ('$LAST').'
        exit "$STATE_CRITICAL"
    fi 


}

# Start script:
. /home/nagios/setdb.sh > /dev/null

check_fs

echo ""
echo "$exit_string"
exit "$exit_code"
预期输出:

WARNING - The source date is (28-JUN-18) on the table. Please perform the steps for the FSL.
Last Thursday was (21-JUN-18).
OK - The source_date is on the (28-JUN-18). Today is (28-JUN-18).
终端中的输出: 在@hootnot建议的更改后添加

+ '[' 'ERROR:
ORA-12546: TNS:permission denied' = 28-JUN-18 ']'
+ '[' 'ERROR:
ORA-12546: TNS:permission denied' ']'
+ echo 'OK - The source_date is on the (ERROR:' ORA-12546: TNS:permission 'denied). Today is (28-JUN-18).'
OK - The source_date is on the (ERROR: ORA-12546: TNS:permission denied). Today is (28-JUN-18).
+ exit 0

编辑:为了反映@JNevill在这篇文章中提到的内容

这个脚本中是否有shebang,它是否与您的shell匹配?您已标记了
sh
,但随后您使用了可能不受支持的非标准
[[
,如果
表明可能对您所处的外壳或
[
的复杂性有误解,则您将
[
混合在同一
中[[
命令及其受支持的位置。使用set-x在调试模式下运行它,并重定向输出:>/tmp/out 2>/tmp/err,然后查看它在执行过程中做了什么是的,很抱歉是#!/bin/sh@hootnot我已经做了这些更改。“我已经通过终端运行了这些…”在你的脚本中使用正确的
!/bin/*sh
,同样重要的是,你的终端已经在你的终端中启动了相同的外壳。我真的不认为你想使用
/bin/sh
。为什么不让一切
!/bin/bash
都变得快乐?;-)?一个原始的
!/bin/sh
无法执行
var=$(cmd)
,您需要使用反勾号(太难在注释中说明,请搜索
[sh]
Q以获取示例。祝您好运。