Linux

如何在 shell 腳本中獲取上一個日期的數據?

  • April 16, 2020

請參考下面的腳本。

#!/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 伺服器,所以我想到了兩種解決方法例如今天的前一個日期的數據是 2020 年 4 月 16 日,因此如果腳本在今天凌晨 2 點執行,它將獲取 2020 年 4 月 15 日的數據。

或者

我將這個腳本安排在一天結束時,比如晚上 11:58 或類似的時間。

在您看來,這是最好的方法,您也可以告訴我晚上 11:58 的 cronjob。

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

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

在您的情況下,我肯定會限制查詢,即無論何時開始查詢,您都可以從一天中獲取記錄。這樣,您可以在凌晨 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)儲存憑據並稍後在像您這樣的腳本中使用它們。

引用自:https://unix.stackexchange.com/questions/580387