Синтаксическая ошибка в строке 1: `('не ожидается
Поскольку я новичок в Unix, может кто-нибудь помочь, почему я получаю эту ошибку?
Error: 0403-057 Syntax error at line 1 : `(' is not expected
Используемый сервер Unix: имя сервера AIX 1 6 00F635064C00
Используемый скрипт (для отправки оповещения по электронной почте, если позавчера не пришли исходные файлы):
#!/usr/bin/ksh
count=$(sqlplus $PROD_DB @select count(*) from file_audit where (file_name like '%abc%' or file_name like '%dce%') and substr(file_name,17,8)=to_char(to_date(sysdate-2,'DD/MM/YY'), 'yyyymmdd') > asa_file_count.log)
daybefore=`TZ=aaa48 date +%d-%m-%Y`
if [[ $count -lt 20 ]]
then
echo "Alert - Source files are yet to be received for date: $daybefore" | mail -s "Alert : Source data files missing" s@g.com
fi
1 ответ
Скобки являются специальными для оболочки. Ваш скрипт SQL содержит круглые скобки, которые вы не хотите обрабатывать оболочкой. Однако оболочка обрабатывает все не заключенные в кавычки скобки. Следовательно, вы можете использовать кавычки для предотвращения интерпретации скобок в вашем SQL:
count=$(sqlplus $PROD_DB "@select count(*) from file_audit where (file_name like '%abc%' or file_name like '%dce%') and substr(file_name,17,8)=to_char(to_date(sysdate-2,'DD/MM/YY'), 'yyyymmdd')" > asa_file_count.log)
# ^ and similarly, a closing quote at the end, just before ">asa_file..." .
Теперь есть вторая проблема: у вас есть
count=$(sqlplus ... > asa_file_count.log)
Тем не менее, я думаю, что это означает, count
всегда будет пустым, так как счетчик перейдет в asa_file_count.log
и не будет доступен для захвата с $()
, Я считаю удаление >asa_file_count.log
будет, вероятно, делать то, что вы хотите:
count=$(sqlplus "$PROD_DB" "<your query>")
(Я также положил двойные кавычки вокруг $PROD_DB
так, на всякий случай PROD_DB
Значение содержит любые пробелы.)