1 #!/bin/sh
2
3 # 张明伟
4 # 20140505
5 # SHELL公共函数头
6 # 对SHELL公共部分进行处理
7 #
8
9 . $HOME/.bash_profile
10 export LANG=zh_CN
11 export LC_ALL=zh_CN
12
13 pub_nul=/dev/null; #空设备
14 pub_splt=" "; #分割符
15 #获取系统数据日期
16 pub_td=$(date +%Y%m%d) #today
17 pub_tm=$(date +%H%M%S) #time
18 pub_dt="$pub_td $pub_tm"; #日期时间
19 pub_monstr=${pub_dt:0:6}01 #月开始
20
21 #kpi中使用的日期:上日中CMN_SYSDATE
22 pub_dt=$(date +"%Y%m%d" -d " -2 days ")
23 pub_ldt=$(date +"%Y%m%d" -d " -3 days ")
24 pub_ndt=$(date +"%Y%m%d" -d " -1 days ")
25 #kpi中使用的日期
26
27 #当天数据日期
28 pub_dtd=$pub_ndt;
29
30 #上年年末
31 pub_lastyearend=$(date +"%Y%m%d" -d "${pub_dt:0:4}0101 -1 days ");
32
33 #下月
34 pub_nxtmss=$(date +"%Y%m%d" -d "$pub_monstr 1 months ")
35
36 #月末
37 pub_monend=$(date +"%Y%m%d" -d "${pub_nxtmss:0:6}01 -1 days ")
38 #上月月末
39 pub_lastmend=$(date +"%Y%m%d" -d "${pub_ndt:0:6}01 -1 days")
40 #全局结果表,共享变量
41 pub_result="";
42 #logs目录
43 pub_logdir="$HOME/zmw_data/logs";
44 pub_logf="";
45 pub_debug="N"; #这个是不写日志,有些标示,日志文件为/dev/null,只打印屏幕;
46
47 #增量,一般用于日期
48 [ "$pub_incr" = "" ] && pub_incr=1;
49
50 #日期类型,一般是月
51 pub_datatype="M";
52 pub_datatype=$(echo $pub_datatype | tr 'a-z' 'A-Z');
53
54 #获取进程号
55 getpid()
56 {
57 pub_pname="张明伟伟进程名,例如:mainETL.xml";
58 [ "$1" != "" ] && pub_pname="$1";
59 pub_result="";
60 pub_result=$( ps -ef | grep "$pub_pname" | grep -v "grep" | tr -s " " ":" | cut -f 2 -d : );
61 }
62
63
64 #传入参数上一天
65 lastday()
66 {
67 pub_result="";
68 pub_ld=-1;
69 pub_thisday=$pub_td;
70 [ "$1" != "" ] && pub_lthisday=$1;
71 [ "$2" != "" ] && pub_ld=$2;
72 #date +"%Y%m%d" -d " $pub_lthisday $pub_ld days"
73 pub_result=$(date +"%Y%m%d" -d "$pub_lthisday $((-1*pub_ld)) days")
74 #echo "[$pub_result]"
75 }
76
77 #传入参数后一天
78 nextday()
79 {
80 pub_result="";
81 pub_d=1;
82 pub_thisday=$pub_td;
83 [ "$1" != "" ] && pub_nthisday=$1;
84 [ "$2" != "" ] && pub_d=$2;
85 lastday $pub_nthisday -$pub_d;
86 }
87
88 #上一年年末
89 getlastyearend()
90 {
91 pub_v_datadate="$1"
92 if [ "$1" = "" ]
93 then
94 pub_result=$pub_lastyearend;
95 else
96 pub_result=$(date +"%Y%m%d" -d "${pub_v_datadate:0:4}0101 -1 days ")
97 fi;
98
99 }
100
101 #两日期相减
102 fc_datediff()
103 {
104 [ "$pub_xstrdt" = "" ] && pub_xstrdt=$pub_dtd ;
105 [ "$pub_xenddt" = "" ] && pub_xenddt=$pub_dtd;
106 pub_xstrdt=$1;
107 pub_xenddt=$2;
108 v_starts=$(date -d "$pub_xstrdt" +"%s");
109 v_ends=$(date -d "$pub_xenddt" +"%s");
110 v_sub=$((v_ends-v_starts));
111
112 pub_result=$((v_sub/3600/24));
113 }
114
115 #传入参数间的月末或每天,取决于datatype
116 fc_getdayebtw()
117 {
118 pub_strdt=$1;
119 pub_enddt=$2;
120 pub_datatype=$(echo $pub_datatype | tr 'a-z' 'A-Z');
121 if [ "$pub_datatype" = "D" -o "$pub_datatype" = "M" ]
122 then
123 if [ "$pub_strdt" = "" -o "$pub_enddt" = "" ]
124 then
125 echo "请输入开始时间和结束时间参数!"
126 exit;
127 fi;
128
129 pub_ds_1=$pub_strdt
130 pub_de_1=$pub_enddt
131 #echo pub_ds_1 is [$pub_ds_1] and pub_de_1 is [$pub_de_1];
132
133 #pub_result="$pub_ds_1";
134 pub_result="";
135 while [ $pub_ds_1 -le $pub_de_1 ]
136 do
137 if [ "$pub_datatype" = "M" ]
138 then
139 pub_ds_1=${pub_ds_1:0:6}01
140 #echo ds_1 is $ds_1
141 pub_ds_1=$(date -d "$pub_ds_1 + $pub_incr months " +"%Y%m01" )
142 pub_ds_1=$(date -d "$pub_ds_1 - $pub_incr days " +"%Y%m%d" )
143 #echo "datatype is $datatype and ds_1 is $ds_1"
144 fi;
145
146 [ $pub_ds_1 -le $pub_de_1 ] && pub_result="$pub_result $pub_ds_1"
147 pub_ds_1=$(date -d "$pub_ds_1 +$pub_incr day " +"%Y%m%d");
148 done;
149 fi;
150 }
151
152 #删除空格
153 trim()
154 {
155 pub_str="";
156 [ "$1" != "" ] && pub_str="$1";
157 pub_str=$( echo "$1" | tr -d " " );
158 pub_result="$pub_str";
159 }
160
161 #替换
162 replace()
163 {
164 pub_str="";
165 pub_s="";
166 pub_d="";
167 [ "$1" != "" ] && pub_str="$1";
168 [ "$2" != "" ] && pub_s="$2";
169 [ "$3" != "" ] && pub_d="$3";
170 #echo [$pub_str..$pub_s...$pub_d]
171 pub_result=${pub_str//"$pub_s"/"$pub_d"}
172 }
173
174 #指定月上月末
175 getmonend()
176 {
177 pub_g_dt=$1
178 pub_i=$2;
179 [ "$2" = "" ] && i=1;
180 pub_g_dt=$(date +"%Y%m%d" -d "${pub_g_dt:0:6}01 $i months ago")
181 pub_result=$(date +"%Y%m%d" -d "${pub_g_dt:0:6}01 1 days ago ");
182 }
183
184 #echo logdir is $logdir;
185 getlogname()
186 {
187 pub_appnm="$1";
188
189 [ "$pub_appnm" != "" ] && pub_appnm=$(basename "$pub_appnm");
190 pub_appnm=${pub_appnm%.*};
191 pub_result="$pub_logdir/$pub_appnm.log";
192
193 [ "$pub_debug" = "Y" ] && pub_result="$pub_nul";
194 }
195
196 pub_sqlstate="SQLSTATE";
197 #db2运行,需返回数据
198 db2cmd()
199 {
200 #执行函数时建议加上此句;
201 pub_old_debug=$pub_debug;
202
203 pub_c_sql="$1";
204 pub_result="";
205 pub_sqlcode=0;
206 [ "$pub_c_sql" = "" ] && pub_result="SQL语句为空" && return;
207 [ "$2" != "" ] && pub_debug="$2";
208 #为了和前面的程序兼容,增加传入pub_debug和设置pub_debug参数都起作用!
209 [ "$pub_old_debug" = "" ] && pub_debug=$pub_old_debug;
210 [ "$pub_debug" = "" ] && pub_debug="N";
211
212 if [ "$pub_debug" != "Y" ]
213 then
214 db2 connect to zxjxdbs>$pub_nul;
215
216 pub_result=$(db2 +w -x "$pub_c_sql");
217
218 pub_result=$(echo "$pub_result" | tr -s " " "$pub_splt");
219
220 pub_result=${pub_result# *};
221
222 pub_result=${pub_result%* };
223 [ "$pub_result" = "-" ] && pub_result="";
224 pub_hd=$(echo "$pub_result" | head -n 1 );
225
226 pub_sqlinfo=${pub_hd%%"${pub_sqlstate}"*};
227 if [ "$pub_sqlinfo" != "" -a "$pub_sqlinfo" != "$pub_hd" ]
228 then
229 pub_sqlcode=$(echo "$pub_hd" | cut -d " " -f 1);
230
231 #若有错误,则把错误屏蔽
232 #pub_cnt=$(echo $pub_result | wc -l )
233
234 #pub_result=$(tail -$((pub_cnt-1)) $pub_result)
235 fi;
236
237 #echo pub_result[$pub_result]
238 db2 connect reset>$pub_nul;
239 db2 terminate>$pub_nul;
240 fi;
241 }