如何在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)来存储凭据并稍后在像您这样的脚本中使用它们。

相关内容