shell文件

#!/bin/sh

#
# param 1: log string

#下面的$1指的是调用这个function时传过来的第一个参数,依次类推 $2第二个 $3第三个
funcLog() {
echo "$1\r"
}

funcPrintUsage() {
funcLog "+--------------------------------------------------------------+"
funcLog "|Manual usage: $0 <database user> <database password> <reportDate DD/MM/YYYY> <reportTime HH24:MI>"
funcLog "|"
funcLog "|Example: $0 qcb_user qcb_password 15/02/2016 01:30"
funcLog "+--------------------------------------------------------------+"
}

#引入下面这个shell脚本

. /qcb/uxprod/java/bin/env.sh

#定义变量,以供下面使用

BATCH_CONFIG_DIR=/qcb/uxprod/java/cfg/
BATCH_CONFIG_FILE=${BATCH_CONFIG_DIR}/batch.properties
SYS_CONFIG_FILE=${BATCH_CONFIG_DIR}/system.properties
EMAIL_FOUND_FILE=${BATCH_CONFIG_DIR}/emailfund.properties
MAIL_CONFIG_FILE=${BATCH_CONFIG_DIR}/mail.properties
SACNING_IP_FILE=${BATCH_CONFIG_DIR}/batchanonymousIP.properties
RUNDATE_FILE=/project/QCB/java/rundate

#导入jar包

CLASSPATH=/qcb/uxprod/java/lib:/qcb/uxprod/java/lib/ojdbc6.jar:/qcb/uxprod/java/lib/freemarker-2.3.8.jar:/qcb/uxprod/java/lib/mail.jar

CLS_NAME=com.excelhk.ibank.report.IpScanningReport

# Config multiple login attempts within minutes
TIME_IPSCAN=5
# Config time range of data to scan hourly (60 minutes)

#定义变量TIME_SAMEIP_DIFFACCT,赋值60,注意:等号左右没有空格
TIME_SAMEIP_DIFFACCT=60

#定义变量REPORT_TIME,赋值为空
REPORT_TIME=NIL
REPORT_DAY=NIL
REPORT_TEMP_DAY=NIL
DB_USER=NIL
DB_PWS=NIL
RunMode=NIL
SYSTEM_PROP=NIL
###################
## End config
###################

# $#的意思是putty传给shell的脚本个数
case $# in

# 3|4)三个或四个

3|4)

#把第一个参数赋值给DB_USER这个变量
DB_USER=$1
DB_PWS=$2

#不太清楚这句话什么意思
SYSTEM_PROP="-Dbatch.prop=${BATCH_CONFIG_FILE} -Dmail.prop=${MAIL_CONFIG_FILE} -Ddb.user=${DB_USER} -Ddb.password=${DB_PWS}"
RunMode=11111
REPORT_TIME="01:28:42"

#拿到RUNDATE_FILE这个变量制定文件的内容,赋值给REPORT_DAY
REPORT_DAY=`cat $RUNDATE_FILE`

# Running Daily

#如果参数个数等于3
if [ $# = 3 ]; then
RunMode=11101
REPORT_TIME="$3 00:00:00"
fi
# Running Hourly

#如果参数个数等于4
if [ $# = 4 ]; then
RunMode=11110

#REPORT_TIME接受参数3和参数4的赋值,实际是两个参数,

#比如shell给java的main方法传一个参数,args数组实际接受了两个$3   $4
REPORT_TIME="$3 $4:00"
REPORT_DAY=$4
fi
;;

*)
funcPrintUsage
exit 1
;;
esac

###################
## Main progress
###################

date

$_JAVA_PATH_/bin/java -Xms64m -Xmx256m ${SYSTEM_PROP} -classpath $CLASSPATH ${CLS_NAME} ${EMAIL_FOUND_FILE} ${RunMode} ${SACNING_IP_FILE} ${TIME_IPSCAN} ${TIME_SAMEIP_DIFFACCT} ${REPORT_DAY} ${REPORT_TIME} ${SYS_CONFIG_FILE}
echo ""
date
echo ipScan.sh ends..............

shell调用的java文件

package com.excelhk.ibank.report;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.sql.SQLException;
import java.util.ArrayList;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import com.excelhk.ibank.appobj.CommonDisplay;
import com.excelhk.ibank.util.Db;
import com.excelhk.ibank.util.DbConnection;
import com.excelhk.ibank.util.MailFunc;
import com.excelhk.ibank.util.SysConfig;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class IpScanningReport {
private static Properties prop = null;
private static String pathPrefix = "/mail";
private static Map<String,Template> tempMap = new HashMap<String,Template>();
private static String tempName = "batchIpScan.ftl";
private static String encoding = "utf-8";
//private static String mailPath = "mail/emailfund.properties";
private static IPScanReport ipReportDAO = new IPScanReport();
private static Configuration conf = new Configuration();

public static void main(String[] args) throws Exception {
System.err.println("IpScanningReport main method Start!");
/*
if(args.length != 7) {
for (String string : args) {
System.out.println(string);
}
System.err.println("Usage: IpScaning <batchCfgFile> <RunMode> <scanIpFile> <timeIpScan> <timeDuration> <reportDate> <reportTime> <");
System.exit(0);
}
*/
System.out.println("shell to java argument begin!");
String mailPath = args[0];//batch.properties
System.out.println("args[0] mailPath"+mailPath);
//String mailPath = "/qcb/uxprod/java/cfg/emailfund.properties";
//String mailPath = "D:\\jason\\QCB\\workspace\\QCBWeb\\src\\mail\\emailFund.properties";
String runMode = args[1];
System.out.println("args[1] runMode: "+runMode);
//String runMode = "11111";
String scanIpFile = args[2];//IpScan.properties
System.out.println("args[2] scanIpFile: "+scanIpFile);
//String scanIpFile = "D:\\jason\\QCB\\workspace\\QCBWeb\\src\\mail\\batchanonymousIP.properties";
//String scanIpFile = "/qcb/uxprod/java/cfg/batchanonymousIP.properties";
String time_ipscan = args[3];//ipscanʱ
System.out.println("args[3] time_ipscan: "+time_ipscan);
//String time_ipscan = "5";
String time_sameip_diffacct =args[4];
System.out.println("args[4] time_sameip_diffacct: "+time_sameip_diffacct);
//String time_sameip_diffacct = "60";
String report_date_temp=args[5];
System.out.println("args[5] report_date_temp: "+report_date_temp);
String report_date = CommonDisplay.getDateFmt(report_date_temp);
System.out.println("args[5] report_date: "+report_date);
//String report_date="24/01/2019";
//String report_date="16/01/2019";
String report_times=args[6];
System.out.println("args[6] report_times: "+report_times);
//String report_times="09:28:42";
//String report_times="03:03:03";
String report_time=report_date+" "+report_times;
System.out.println("report_date+report_times: "+report_time);

// String systemPath=args[7];
String systemPath="/qcb/uxprod/java/cfg/system.properties";
System.out.println("args[7] systemPath: "+systemPath);
FileInputStream lfis_Cfg = new FileInputStream(systemPath);
Properties vprp_SysProperty=new Properties();
vprp_SysProperty.load(lfis_Cfg);
SysConfig.init(vprp_SysProperty);
Db.init();

System.out.println("shell to java argument end!");

char [] arr=runMode.toCharArray();
String scanIps = getScanIPs(scanIpFile);

List<HashMap<String, Object>> listData = new ArrayList<HashMap<String, Object>>();

//get Daily scan dada give by ip(Daliy)
if(arr[0]=='1'){
String type="Daily";
List<HashMap<String, Object>> listData1 =null;
listData1 = ipReportDAO.getAnonymousIpInformation(scanIps, type, report_time,time_ipscan);
// listData1 = getListForTesting();
for(HashMap hashMap:listData1){
listData.add(hashMap);
}
}

//(Minutely)
if(arr[1]=='1'){
String type="Minutely";
List<HashMap<String, Object>> listData1 =null;
listData1 = ipReportDAO.getAnonymousIpInformation(scanIps, type, report_time,time_ipscan);
for (HashMap<String, Object> hashMap : listData1) {
listData.add(hashMap);
}
}

if (arr[2]=='1') {
List<HashMap<String, Object>> listData2 = ipReportDAO.getSameAccountMultipleIP(report_time);
for (HashMap<String, Object> hashMap : listData2) {
listData.add(hashMap);
}
}

if(arr[3]=='1'){
List<HashMap<String, Object>> listData2 = ipReportDAO.getSameAccountMultipleIP(report_time, time_ipscan, time_sameip_diffacct);
for (HashMap<String, Object> hashMap : listData2) {
listData.add(hashMap);
}
}

if (arr[4]=='1') {
List<HashMap<String, Object>> listData3 = ipReportDAO.getSameIPMultipleAccount(report_time, time_ipscan, time_sameip_diffacct);
for (HashMap<String, Object> hashMap : listData3) {
listData.add(hashMap);
}
}

if (listData.size()>0) {

//InputStream inputStream = IpScanningReport.class.getClassLoader().getResourceAsStream(mailPath);
InputStream inputStream = new FileInputStream(mailPath);
conf.setClassForTemplateLoading(IpScanningReport.class, pathPrefix);
try {
prop = new Properties();
prop.load(inputStream);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

Writer writer = new StringWriter(2048);
Template template = getTemplate(tempName);
template.setEncoding(encoding);
Map<String, Object> data = new HashMap<String, Object>();
data.put("listData", listData);
template.process(data, writer);
String textMsg = writer.toString();
MailFunc.sendEmailWithTempalte(prop, textMsg);
}
}

public static Template getTemplate(String tempName) throws IOException{
if(tempMap.containsKey(tempName)){
return tempMap.get(tempName);
}else{
Template template = conf.getTemplate(tempName);
tempMap.put(tempName, template);
return template;
}
}

private static String getScanIPs(String scanIpFile)throws IOException, FileNotFoundException {
Properties rejectCodeProp = new Properties();
rejectCodeProp.load(new FileInputStream(scanIpFile));
String scanIps = "'";
int count = Integer.parseInt(rejectCodeProp.getProperty("Count"));
for (int i = 1; i <= count; i++) {
if(i > 0){scanIps = scanIps + ",'";}
scanIps = scanIps + rejectCodeProp.getProperty("IP"+i);
scanIps = scanIps + "'";
}
return scanIps;
}

}

自己编写的Shell的更多相关文章

  1. Linux如何编写自启动shell脚本

    1.需求分析 在很多情况下,程序员都做着重复枯燥的工作,虽然这些工作也是必须的,其实这些重复性的工作可以执行脚本替代:今天笔者就如何编写自启动shell脚本减少程序员开启服务器后的环境开启工作: 2. ...

  2. linux c语言编写一个shell壳

    目的:我们要用c语言编写一个shell可以运行在linux机器上的. 介绍:shell所在的层次 我们要做的是操作系统,用于用户与操作系统进行交互的myhsell 思路:用户输入  一行字符串,我们先 ...

  3. 1.编写一个shell脚本

    一.shell和shell脚本 在linux系统下,以 #/bin/bash开头的文本会被shell解释器进行解释.   shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操 ...

  4. 使用redis4.0.1和redis-cluster搭建集群并编写重启shell脚本

    1.删除机器上原有的redis2.8 关闭redis-server killall -9 redis-server 查找redis文件所在目录 which redis 删除相关文件 rm -rf re ...

  5. 170509、文本编辑器编写的shell脚本在linux下无法执行的解决方法

    今天碰到一个奇怪的问题,编写好的shell脚本再linux上执行一直提示找不到文件或目录,后来想想是文本编辑器的问题,记录下来!!! 1.查看当前文本格式 Notepad++界面中,在右下角有文件格式 ...

  6. 关于windows下编写的shell脚本在linux下无法运行报错问题

    首先,你写的shell脚本必须是正确的, 其次,无法运行的原因:因为windows下的换行是两个字节,而你上传到linux,linux下换行是两个字节,所以编译的酒不正确的,导致无法 运行脚本, 这种 ...

  7. 编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可

    文件名:service-user.sh 文件内容: ##shell脚本的头文件必须有#!/bin/sh ##再次配置java环境变量以防报其他错误## java env#jdk安装目录export J ...

  8. Windows编写的shell脚本,在linux上无法执行

    前两天由于要查一个数据库的binlog日志,经常用命令写比较麻烦,想着写一个简单的脚本,自动去刷一下数据库的binlog日志,就直接在windows上面写了,然后拷贝到linux中去运行,其实很简单的 ...

  9. 编写一个shell脚本来编译并运行java代码

    概述 编译和运行java分别要用到javac命令和java命令,虽然可以使用IDE(比如eclipse,InteliJ,NetBean...),按一下快捷键就可以实现编译并运行,但是,在之前还要配置一 ...

随机推荐

  1. js 绘制数学函数

    <!-- <!doctype html> --> <html lang="en"> <head> <meta charset= ...

  2. csharp: sum columns or rows in a dataTable

    DataTable dt = setData(); // Sum rows. //foreach (DataRow row in dt.Rows) //{ // int rowTotal = 0; / ...

  3. 29:ISBN号码

    29:ISBN号码 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位 ...

  4. 【读书笔记】iOS-设计简单的Frenzic式益智游戏

    如果你决定用UIView动画或Core Animation,一定要编写一些测试用例,模拟游戏可能遇到的要求最高的动画,另外不要忘记播放声音.不要等到最后才增加声音,因为在iPhone上播放音乐和音效确 ...

  5. 纯小白入手 vue3.0 CLI - 3.1 - 路由 ( router )

    vue3.0 CLI 真小白一步一步入手全教程系列:https://www.cnblogs.com/ndos/category/1295752.html 尽量把纷繁的知识,肢解重组成为可以堆砌的知识. ...

  6. SAP MM 并非奇怪现象之MB5B报表查不到某一笔出库记录?

    物料号:1301002696 工厂代码:2160 MB5B,如下查询条件, 查询结果中,期初与期末库存数量都是0,期间的出库入库数量都是0.事实上该物料期初应该是有库存的.并且我用MB51相同时间段查 ...

  7. win7 x64 +vs2015 + cmake3.10.3编译opencv-3.4.1+opencv_contrib-3.4.1源码,并进行配置

    简介: 一直以来都是在ubuntu下使用opencv,最近因为有<图像处理与模式识别>这门课,需要使用vs2015+opencv提交课程作业,因为opencv官方编译好的exe没有cont ...

  8. Linux 下tomcat 出现 java.lang.OutOfMemoryError: unable to create new native thread

    问题现象: Tomcat(8.5.13)部署了SuperMap iServer,并发用户在100左右.系统运行一段时间后,服务崩溃.异常提示 问题分析: 1.看到日志中的提示信息后,认为是系统内存不足 ...

  9. JavaScript大杂烩0 - WEB基础知识

    1. 协议小结:HTTP协议与TCP/IP协议 现代Web应用开发的基础是HTTP协议,那么HTTP协议与我们熟知的TCP/IP协议有什么关系呢? 这个要从网络通信模型说起,简单的说,计算机通信就像两 ...

  10. JS数组分组

    //1.找出数组中相同的元素 getRepeatNum(arr) { let obj = {}; for (let i = 0, len = arr.length; i < len; i++) ...