如何在shell腳本中取得上一個日期的資料?

如何在shell腳本中取得上一個日期的資料?

請參考下面的腳本。

#!/usr/bin/bash

#scirpt to connect with db

master_db_user=''
master_db_passwd=''
master_db_port='3306'
master_db_host=''
master_db_name='uppcldashboard'

Now=$(date +"%d-%m-%Y")
date=$(date +"%F")


#Preparing script

#SQL_Query='select * from test_table;'

#MySql Command to connect to a database

#mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select * from uppcl_amount_details into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mysql -u$master_db_user -p$master_db_passwd -D$master_db_name -e "select *,IFNULL(ref_4,0),IFNULL(ref_3,0),IFNULL(ref_7,0),IFNULL(ref_8,0),date_format(posting_date,'%Y-%m-%d') from uppcl_amount_details where posting_date>=CURDATE() into outfile '/created_files/uppcl.csv' fields terminated by ',' lines terminated by '\n';"

mv /created_files/uppcl.csv /created_files/offline_collection$Now.csv

sed -i "1i id","Cashier_id","Cheque_no","collection_amount","collection_type","Posting_date","Discom","Division_Code","Division_Name","Head_cashier_id","ref_3","ref_4","ref_5","ref_6","ref_7","ref_8","Tran_Date","Status","Posting_Updated_Date" /created_files/offline_collection$Now.csv
echo "End of the Script"

好的,這個腳本基本上從當前日期的 MySQL 伺服器取得數據,我必須安排這個腳本,以便它能夠取得當前日期的數據。但這裡有一個問題,資料以連續的方式出現,所以我不能只安排在凌晨 2 點,因為它將在凌晨 2 點之前將資料輸入 MySQL 伺服器,所以我想到了兩種解決方法例如,今天的前一個日期的資料是16/04/2020,因此如果腳本今天凌晨2 點運行,它將獲取15/04/2020 的資料。

或者

我以這樣的方式安排此腳本,例如在一天結束時,例如晚上 11:58 或類似的時間。

您認為這是最好的方法,您也可以告訴我晚上 11:58 的 cronjob 嗎?

如果我考慮獲取前一個日期的數據,那麼應該進行更改以獲取該數據。

謝謝和問候, 薩加爾·曼達爾

答案1

在您的情況下,我肯定會限制查詢,無論查詢何時啟動,您都會獲得一天的記錄。這樣,您就可以在凌晨 2 點或任何時間開始。這樣,如果當時應該執行腳本時出現問題,您可以稍後手動執行該腳本。

在您的腳本中將 where 條件變更為如下所示:

where DATE(posting_date) = DATE(DATE_ADD(CURDATE(), INTERVAL -1 DAY))

這樣,您只能獲得具有昨天日期的記錄。

如果您想使用 bash 變數來執行此操作,請以適合 MySql 的形式取得當前日期:

date=$(date --rfc-3339=date)

的輸出$date採 MySql 可辨識的形式:

2020-04-16

然後設定一個像這樣的where條件:

where DATE(posting_date) = DATE(DATE_ADD('$date', INTERVAL -1 DAY))

如果更改interval -1 day,您可以獲得任意一天的資料。


還有一件事。不要從腳本向 MySql 提供使用者名稱和密碼。這樣,密碼就會被洩露,遲早你會後悔的。使用mysql_config_editorhttps://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html)來儲存憑證並稍後在像您這樣的腳本中使用它們。

相關內容