由于我是Unix的新手,有人可以帮我解决这个错误吗?
Error: 0403-057 Syntax error at line 1 : `(' is not expected
使用的Unix服务器:AIX servname 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
答案 0 :(得分:2)
圆括号是shell的特殊之处。您的SQL脚本包含您不希望shell处理的括号。但是,shell处理所有未引用的括号。因此,您可以使用引号来防止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
的值包含任何空格。)