2017-04-07 74 views
1

由於我是新來的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" [email protected] 
fi 
+0

請編輯您的文章,並對其進行格式化妥善...... –

+0

歡迎來到本網站!查看[tour](https://stackoverflow.com/tour)和[「如何問問」](https://stackoverflow.com/help/how-to-ask/)頁面,瞭解更多關於提問的信息這將會吸引高質量的答案。 – cxw

回答

2

括號是特殊的外殼您的SQL腳本包含你不希望shell處理括號。但是,謝爾l處理所有未加引號的括號。因此,您可以使用引號,以防止你的SQL括號由Shell解釋:

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的價值包含空格。)

+1

您捕獲sqlplus的輸出。要將其與數字進行比較,輸出必須是數字,而不是其他數字。 我懷疑這一點。通常至少包含一個標題。因此,你可能需要做額外的工作,以擺脫所有的休息,並在錯誤的情況下.... – ULick

相關問題