Linux shell for jar test

Linux shell 脚本,循环解析命令行传入的所有参数,并按照不同的传参实现对不同的 java jar文件 进行测试执行。

[root@localhost demo]# cat connTest.sh

#!/bin/bash# Linux shell for qftool java jar test# modes
DEFAULT_MODE=2jarfiles[1]=common-1.0-SNAPSHOT-shaded-with-dependencies.jar
jarfiles[2]=dbconnector-1.0-SNAPSHOT-shaded-with-dependencies.jar
jarfiles[3]=dbfreader-1.0-SNAPSHOT-shaded-with-dependencies.jar
jarfiles[4]=sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar
jarfiles[0]=${jarfiles[$DEFAULT_MODE]}maxMode=${#jarfiles[@]}#echo "default jarfile: ${jarfiles[0]}"
#echo "maxMode: $maxMode"classMains=([1]=com.xxx.qftools.common.Main [2]=com.xxx.qftools.dbconnector.Main [3]=com.xxx.qftools.dbfreader.Main [4]=com.xxx.qftools.sm4.Main)
classMains[0]=${classMains[$DEFAULT_MODE]}
#echo "default classMain: ${classMains[@]}"h_idx=-1
m_idx=-1
f_idx=-1
c_idx=-1while getopts "hm:f:c:" optnamedocase "$optname" in"h")echo -e "***********************************************************************\n"echo -e "Use $0 [ -h | [ -m mode [ -f jarfile -c classMain ] ] ] \n"echo -e "    -h: show help"echo -e "    -m: mode. -m 0 must used with -f and -c args. Supported modes:"echo -e "        0: use input jarfile(-f ...) and input classMain(-c ...)"echo -e "        1: use -f common-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.common.Main"echo -e "        2: use -f dbconnector-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.dbconnector.Main"echo -e "        3: use -f dbfreader-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.dbfreader.Main"echo -e "        4: use -f sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.sm4.Main"echo -e "    -f: jarfile, the filepath of jar file. used with -m 0"echo -e "    -c: classMain, the main class. used with -m 0"echo -e "\n  egs: "echo -e "    $0       # for default test. The effect is equivalent to exec: $0 -m 3"echo -e "    $0 -m 0 -f ./hello.jar -c com.xxx.qftools.hello.Main \n"echo -e "    $0 -m 1  # for common test"echo -e "    $0 -m 2  # for dbconnector test (default mode)"echo -e "    $0 -m 3  # for dbfreader test"echo -e "    $0 -m 4  # for sm4 test"echo -e "***********************************************************************\n"h_idx=$OPTIND;;"m")#echo "m_idx: $OPTIND, m_val: $OPTARG"m_idx=$OPTINDm_val=$OPTARG;;"f")echo "f_idx: $OPTIND, f_val: $OPTARG"f_idx=$OPTINDf_val=$OPTARG;;"c")echo "c_idx: $OPTIND, c_val: $OPTARG"c_idx=$OPTINDc_val=$OPTARG;;"*")echo "Unsupport opt: current.idx: $OPTIND";;esacdone## -jar : jar build 打包时如果已经指定了 <mainClass>...</mainClass> 则直接使用 -jar,无需再指定 mainClass,使用jar中定义的mainClass
# java -Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar  -Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jar  -jar dbconnector-1.0-SNAPSHOT-shaded-with-dependencies.jar## -cp : jar build 打包时如果未指定 <mainClass>...</mainClass> 则使用 -cp,执行的时候要指定 mainClass
# java -Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar  -Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jar  -cp dbconnector-1.0-SNAPSHOT-shaded-with-dependencies.jar $classMainif [ $# -eq 0 ]; then# with no args, use default modefile=${jarfiles[$DEFAULT_MODE]}class=${classMains[$DEFAULT_MODE]}
elif [ $h_idx -ge 0 ]; then# return success for "-h"  show helpecho "for help"exit 0
elif [ $m_idx -ge 0 ]; then#if [ $m_val -eq 0 ]&&[ $f_idx -ge 1 ]&&[ -n "$f_val" ]&&[ $c_idx -gt 1 ]&&[ -n "$c_val" ]; thenif [ $m_val -eq 0 ]&&[ $f_idx -ge 0 ]&&[ -n "$f_val" ]&&[ $c_idx -ge 0 ]&&[ -n "$c_val" ]; then# -m 0 -f xxx -c xxxjarfiles[0]=$f_valclassMains[0]=$c_valfile=${jarfiles[0]}class=${classMains[0]}echo "input is: -m 0 -f $file -c $class"elif [ $m_val -ge 1 ]&&[ $m_val -le 4 ]; then# -m 1 or -m 2 or -m3 or -m 4file=${jarfiles[$m_val]}class=${classMains[$m_val]}echo "input is: -m $m_val"elseecho "m_idx: $m_idx, f_idx: $f_idx, c_idx: $c_idx; f_val: $f_val, c_val: $c_val"echo "ERROR: input invalid! mode invalid, not match [0, 4]. For help: $0 -h"exit 0fi
elseecho "ERROR: input invalid! For help: $0 -h"exit 0 
fiargs=-Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar
args="$args":-Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jarjava $args -cp $file $classecho -e "\nFinished test for: \nargs: $args \nfile: $file \nclass: $class \n"
echo -e "\n------------------------------ END ------------------------------------\n"

执行效果:

[root@localhost demo]# ./connTest.sh  -h

[root@localhost demo]# ./connTest.sh 
[main:31] === dbconnector in ===
[main:33] GBase8a conn test: 
[connTest4GBase8a:48] ====================SSL01
Ssl_cipher-----AES256-SHA
Ssl_cipher_list-----ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM
Ssl_verify_depth-----18446744073709551615
Ssl_verify_mode-----5
Ssl_version-----TLSv1

Finished test for: 
args: -Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar:-Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jar 
file: dbconnector-1.0-SNAPSHOT-shaded-with-dependencies.jar 
class: com.xxx.qftools.dbconnector.Main 


------------------------------ END ------------------------------------


[root@localhost demo]# ./connTest.sh -m 4
input is: -m 4
[encAndDecTest:33] ====================================
[encAndDecTest:34] Padding: PKCS7Padding
[encAndDecTest:37] Timestamp: 1701116992221
[encAndDecTest:45] 秘钥      :66787063323140313231350000000000
[encAndDecTest:46] ---------------
[encAndDecTest:53] Timestamp: 1701116992226,con(ECB加密耗时ms):5
[encAndDecTest:57] Timestamp: 1701116992235,con(ECB解密耗时ms):9
[encAndDecTest:59] ----------------
[encAndDecTest:66] Timestamp: 1701116992236,con(CBC加密耗时ms):1
[encAndDecTest:67] 明文字符长度:22,原文(hex)字符长度:132,加密结果字符长度:160
[encAndDecTest:71] Timestamp: 1701116992240,con(CBC解密耗时ms):4

Finished test for: 
args: -Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar:-Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jar 
file: sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar 
class: com.xxx.qftools.sm4.Main 


------------------------------ END ------------------------------------

[root@localhost demo]# ./connTest.sh -m 0
m_idx: 3, f_idx: -1, c_idx: -1; f_val: , c_val: 
ERROR: input invalid! mode invalid, not match [0, 4]. For help: ./connTest.sh -h
[root@localhost demo]# 

[root@localhost demo]# ./connTest.sh -m 0 -f sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.sm4.Main
f_idx: 5, f_val: sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar
c_idx: 7, c_val: com.xxx.qftools.sm4.Main
input is: -m 0 -f sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar -c com.xxx.qftools.sm4.Main
[encAndDecTest:33] ====================================
[encAndDecTest:34] Padding: PKCS7Padding
[encAndDecTest:37] Timestamp: 1701116992221
[encAndDecTest:45] 秘钥      :66787063323140313231350000000000
[encAndDecTest:46] ---------------
[encAndDecTest:53] Timestamp: 1701116992226,con(ECB加密耗时ms):5
[encAndDecTest:57] Timestamp: 1701116992235,con(ECB解密耗时ms):9
[encAndDecTest:59] ----------------
[encAndDecTest:66] Timestamp: 1701116992236,con(CBC加密耗时ms):1
[encAndDecTest:67] 明文字符长度:22,原文(hex)字符长度:132,加密结果字符长度:160
[encAndDecTest:71] Timestamp: 1701116992240,con(CBC解密耗时ms):4

Finished test for: 
args: -Xbootclasspath/a:lib/gbase-connector-java-9.5.0.1-build1-bin.jar:-Xbootclasspath/a:lib/mysql-connector-java-5.1.35-bin.jar 
file: sm4-1.0-SNAPSHOT-shaded-with-dependencies.jar 
class: com.xxx.qftools.sm4.Main 


------------------------------ END ------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/188042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI公布CEO和董事会成员:微软加入,Ilya出局

11月30日&#xff0c;OpenAI在官网公布了新一届领导层和初始董事会成员&#xff1a;Sam Altman重新担任CEO&#xff0c;Mira Murati继续担任首席技术官&#xff0c;Greg Brockman继续担任总裁。 新的董事会成员包括&#xff1a;Bret Taylor&#xff08;主席&#xff09;、Larr…

docker部署elasticsearch+kibana+head

前言 最近&#xff0c;项目需要使用elasticsearch&#xff0c;所以就想快速安装一个使用&#xff0c;最开始是docker安装了7.10.1版本。 后面计划使用Java开发&#xff0c;发现有 RestHighLevelClient 和 Elasticsearch Java API Client两种客户端连接方式。 然后网上查阅了一…

深入剖析:知识付费系统源码解读与技术实现

知识付费系统源码是构建一个高效、稳定平台的关键。在本文中&#xff0c;我们将深入解析知识付费系统的源码&#xff0c;同时提供一些关键技术代码&#xff0c;以助你更好地理解和实现这一系统。 1. 知识付费系统的基本结构 首先&#xff0c;让我们看一下知识付费系统的基本…

共享娱乐宝库:电视盒子影视源分享攻略

共享娱乐宝库&#xff1a;电视盒子影视源分享攻略 前言电视盒子的基本原理解析1. **硬件组成**&#xff1a;2. **操作系统&#xff1a;**3. **网络连接&#xff1a;**4. **应用市场和应用&#xff1a;**5. **获取影视资源的方式&#xff1a;**6. **用户交互&#xff1a;**7. **…

linux 中vmalloc实现简述

vmalloc 用途 vmalloc只用于内核模块的逻辑地址分配&#xff0c;也就是说它的逻辑地址是挂在init_mm的pgd页表上的。它可将几段不连续物理区域合并分配一个连续逻辑区域。主要用于内核和驱动。 vmalloc 实现 入口在__vmalloc_node_range。 首先分配一个vm_struct&#xff0c…

论文学习-Bert 和GPT 有什么区别?

Foundation Models, Transformers, BERT and GPT 总结一下&#xff1a; Bert 是学习向量表征&#xff0c;让句子中某个词的Embedding关联到句子中其他重要词。最终学习下来&#xff0c;就是词向量的表征。这也是为什么Bert很容易用到下游任务&#xff0c;在做下游任务的时候&a…

经验分享:JMeter控制RPS

一、前言 ​ RPS (Request Per Second)一般用来衡量服务端的吞吐量&#xff0c;相比于并发模式&#xff0c;更适合用来摸底服务端的性能。我们可以通过使用 JMeter 的常数吞吐量定时器来限制每个线程的RPS。对于RPS&#xff0c;我们可以把他理解为我们的TPS&#xff0c;我们就…

C语言猜数字小游戏

本文将介绍如何使用C语言写一个猜数字的小游戏 具体代码如下&#xff1a; #include<stdio.h> #include<stdlib.h> #include<time.h>// 显示游戏菜单 void menu() {printf("**** 猜数字游戏! ****\n");printf("**** 按1开始游戏 ****\…

数组?NO 系Vector啊!

文章目录 前言一、vector的介绍二、vector的使用2.1 vector求容量的用法2.2 vector的增删查改用法2.2.1 尾插2.2.2 尾删2.2.3 头插2.2.4 任意位置删除 2.3 vector的iterator是什么以及失效问题 三、vector的模拟实现3.1 成员变量3.2 成员函数3.2.1 构造函数3.2.2 拷贝构造3.2.3…

Elasticsearch桶聚合和管道聚合

1. 根据名称统计数量 GET order/_search {"_source": false,"aggs": {"aggs_name": { // 自定义查询结果名称"terms": { // 使用的函数"field": "name.keyword"}}} }查询结果例子&#xff1a; "aggregat…

一起学docker系列之十五深入了解 Docker Network:构建容器间通信的桥梁

目录 1 前言2 什么是 Docker Network3 Docker Network 的不同模式3.1 桥接模式&#xff08;Bridge&#xff09;3.2 Host 模式3.3 无网络模式&#xff08;None&#xff09;3.4 容器模式&#xff08;Container&#xff09; 4 Docker Network 命令及用法4.1 docker network ls4.2 …

MSSQL注入

目录 基本的UNION注入&#xff1a; 错误基于的注入&#xff1a; 时间基于的盲注入&#xff1a; 堆叠查询&#xff1a; 理解MSSQL注入是学习网络安全的一部分&#xff0c;前提是您在合法、授权的环境中进行&#xff0c;用于了解如何保护您的应用程序免受此类攻击。以下是有关…

【linux】/etc/security/limits.conf配置文件详解、为什么限制、常见限制查看操作

文章目录 一. limits.conf常见配置项详解二. 文件描述符&#xff08;file descriptor&#xff09;简述三. 为什么限制四. 相关操作1. 展示当前资源限制2. 查看系统当前打开的文件描述符数量3. 查看某个进程打开的文件描述符数量4. 各进程占用的文件描述符 /etc/security/limits…

大势智慧与四川资源测绘签署战略合作协议

战略合作 11月27日上午&#xff0c;武汉大势智慧科技有限公司&#xff08;后简称“大势智慧”&#xff09;和四川省自然资源测绘地理信息有限责任公司&#xff08;后简称“测绘公司”&#xff09;在成都成功签订战略合作协议&#xff0c;大势智慧董事长黄先锋&#xff0c;测绘…

SpringBoot进行消息推送的的几种方式

Spring Boot进行消息推送的几种方式包括&#xff1a; WebSocket SockJS STOMP Server-Sent Events (SSE) Push Notifications 以下是WebSocket的案例代码&#xff1a; 添加WebSocket依赖 <dependency><groupId>org.springframework.boot</groupId>&l…

Android Service中弹出对话框

背景 dialog 对话框只提供Activity上下文显示环境&#xff0c;但是很多时候需要在后台服务中显示对话框的场景&#xff0c;例如后台收到哪个反馈时&#xff0c;弹出对应的对话框提示用户。 解决方案&#xff1a; 1、添加权限&#xff1a; <!--services权限--> <uses…

博文小调研

感谢信 很高兴认识各位盆友&#xff0c;天南地北一家人&#xff01; 无论身在行业差异&#xff0c;所处职位高低&#xff0c;工作年限长短&#xff0c;这个平台都为爱好学习的人们提供了很好的机会和进步的源动力。 博主今年自11月份开启了新的系列文章&#xff0c;每周发表6…

c MJPG

yuv格式的照片是纯yuv的数据&#xff0c;如果不告诉图片查看程序此数据流的长与宽&#xff0c;是无法显示图片的。 MJPG是由多帧jpg图片组成。jpg图片有文件头&#xff0c;里面就有必须的长&#xff0c;宽数据。jpg的图片数据是yuv压缩后的数据。所以jpg解码后的数据也是yuv&a…

容器安全是什么

容器安全是当前面临的重要挑战之一&#xff0c;但通过采取有效的应对策略&#xff0c;我们可以有效地保护容器的安全。在应对容器安全挑战时&#xff0c;我们需要综合考虑镜像安全、网络安全和数据安全等多个方面&#xff0c;并采取相应的措施来确保容器的安全性。 德迅蜂巢原…

Clion+Ubuntu(WSL)+MySQL8.0开发环境搭建

1. 下载 MySQL 源码 访问 MySQL 官方网站&#xff08;MySQL :: Download MySQL Community Server&#xff09;并下载 MySQL 8.0 的源码包&#xff08;mysql-boost-8.0.31.tar.gz&#xff09;。 2. 安装编译依赖 1&#xff09;更换镜像源 参考&#xff1a;Linux Ubuntu 修改…