#!/bin/sh
#
#Author: DenisHuang
#Date:
#Description:
#Usage:
#
#下面这行比较重要,主要是保证放在crontab里跑时,还能认出各个命令的路径,不然就得写死绝对路径
source /etc/profile
#下面这行当脚本里有用join相关的操作时很重要,某些编码格式会令sort的排序规则不一致,从而导致join出现数据丢失问题
export LC_ALL=C
#
#初始化参数
#最常见的参数就是每日定期运行的脚本所要用到的日期参数,不传值的话默认为昨天
#
function init()
{
theDay="$1"
if [ "$theDay" = "" ]
then
theDay=`date +%Y%m%d -d "1 days ago "`
fi
theDay2=`date +%Y-%m-%d -d "$theDay"`
}
#
#执行sql语句
#支持传参或管道方式
#
function executeSql()
{
sql="$1"
if [ "$sql" = "" ]
then
cat | mysql -uroot -N --local-infile
else
echo "$sql" | mysql -uroot -N --local-infile
fi
}
#
#产生分表序号
#在对分表进行批量sql操作时特别有用。
#
function range()
{
echo "" | awk '{
for(i=0;i<100;i++){
printf("d\n",i);
}
}'
}
function range3()
{
echo "" | awk '{
for(i=0;i<1000;i++){
printf("d\n",i);
}
}'
}
#
#url格式化编码
#在wget要post数据时,就可能要用到这个
#
function urlencode() {
od -An -tx1 | awk '{gsub(" ","%"); printf("%s",$0);}'
}
#
#下载html文档,源代码存在$html变量里,支持session保持,仿IE UA,透传Referer
#使用本函数就可以模拟登录动作等等,仿真度极高
#
function getHtml(){
url="$1"
wget "$url" -O a.tmp -q --keep-session-cookies --save-cookies "cookie.tmp" --load-cookies "cookie.tmp" --retry-connrefused --tries=16 --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" --referer="$referer"
html=`cat a.tmp | sed 's/\r//g' `
referer="$url"
}
#
#等待指定的时间,如果本身作业时间超过了需等待时间,就不等待,直接进入下一步。
#在用死循环写的放后台进程跑的定时执行任务需求中,很有用。
#
function waitFor()
{
targetTime=`date +%s -d "$thisTime $sleepInterval"`
nowTime=`date +%s`
sleepTime=`expr $targetTime - $nowTime`
if [ $sleepTime -gt 0 ]
then
echo "等待$sleepTime..."
sleep $sleepTime
echo "继续下一步."
fi
thisTime=`date +"%Y-%m-%d %H:%M:%S"`
}
#
#保存断点,断点文件的格式为:文件名 断点 最后更新日期
#最后更新日期的作用是为了不保留过期的断点,以使得断点文件尽可能的小。
#
function saveBreakPoint()
{
fname="$1"
bpoint="$2"
bptxt=`cat breakpoint.txt | awk '{
if($1!=fname && $3>=yesterday){
print $0
}
}END{
print fname,bpoint,today
}' fname="$fname" bpoint="$bpoint" today="$today" yesterday="$yesterday"`
echo "$bptxt" > breakpoint.txt
}
#
#读指定文件的断点
#
function readBreakPoint()
{
fname="$1"
cat breakpoint.txt | awk '$1==fname{print $2}' fname="$fname"
}
#主函数
function main()
{
init "$1"
}
main "$1"
Comments