Чтение вывода запроса oracle с помощью скрипта bash - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь настроить сценарий bash, в котором подключается к экземпляру Oracle для проверки запланированных различных заданий dba, и если заданное задание c не выполняется, мне нужно отобразить сообщение об ошибке.

Вот сценарий, который я написал, и он работает частично, сценарий работает только до достижения оператора IF

#!/usr/bin/env bash
#write output of the sql query to an output file 
output_file="/tmp/datatool_output.csv"
> $output_file

echo "
SET FEED OFF
SET PAGESIZE 0
SET COLSEP ,
SET linesize 100
SET TRIMSPOOL ON
SET TRIMOUT ON


SELECT JOB_NAME, STATE FROM DBA_SCHEDULER_JOBS where job_name ='run_LoadDatatoolStore';

exit" | sqlplus -s sqlplus -s "username/password@dbip:dbport/SID" >> $output_file

     a_var=($(awk -F',' '{print $2}' $output_file | sed 's/\s//g' | xargs))


for item in ${a_var[@]}
 do
val=$(echo $item  | awk -F',' '{print $1}')

if [[ $val -eq "SCHEDULED"  ]] || [[  $val -eq "RUNNING" ]] ; then
     echo "OK: The job LoadDatatool is either Scheduled or in the Running state"
     exit 0 # this is used for interpretation by nagios to display no alert alert
else [[ $val -eq "BLOCKED" ]]
     echo "CRITICAL: The Db scheduler job LoadDatatool is in a Blocked state"
      exit 2
fi

Я получаю

test.sh: line 24: syntax error: unexpected end of file

, когда я Запустите скрипт. Любая помощь в выяснении этого приветствуется.

Спасибо, Картик

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Добавить сделано в конце скрипта

0 голосов
/ 04 февраля 2020

Вы должны переписать свой if следующим образом:

if [[ $val -eq "SCHEDULED"  ]] || [[  $val -eq "RUNNING" ]] ; then

будет

if [[ $val = "SCHEDULED"  ]] || [[  $val = "RUNNING" ]] ; then

или

if [[ $val = "SCHEDULED"  || $val = "RUNNING" ]] ; then

-eq используется для для сравнения чисел = используется для сравнения строк

PS Также вместо перенаправления вывода sqlplus вы можете использовать SPOOL функцию sqlplus И вместо этого уродливого echo вы можете написать sql в файле и exe c из командной строки, например:

sqlplus -s "username/password@dbip:dbport/SID" @sql_script.sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...