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=2

jarfiles[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=-1

while getopts "hm:f:c:" optname
  do
    case "$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=$OPTIND
         m_val=$OPTARG
         ;;
      "f")
        echo "f_idx: $OPTIND, f_val: $OPTARG"
         f_idx=$OPTIND
         f_val=$OPTARG
        ;;
      "c")
        echo "c_idx: $OPTIND, c_val: $OPTARG"
         c_idx=$OPTIND
         c_val=$OPTARG
        ;;
      "*")
        echo "Unsupport opt: current.idx: $OPTIND"
        ;;
    esac
  done


## -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 $classMain

if [ $# -eq 0 ]; then
  # with no args, use default mode
  file=${jarfiles[$DEFAULT_MODE]}
  class=${classMains[$DEFAULT_MODE]}
elif [ $h_idx -ge 0 ]; then
  # return success for "-h"  show help
  echo "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" ]; then
  if [ $m_val -eq 0 ]&&[ $f_idx -ge 0 ]&&[ -n "$f_val" ]&&[ $c_idx -ge 0 ]&&[ -n "$c_val" ]; then
    # -m 0 -f xxx -c xxx
    jarfiles[0]=$f_val
    classMains[0]=$c_val
    file=${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 4
    file=${jarfiles[$m_val]}
    class=${classMains[$m_val]}
    echo "input is: -m $m_val"
  else
    echo "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 0
  fi
else
  echo "ERROR: input invalid! For help: $0 -h"
  exit 0 
fi

args=-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.jar

java $args -cp $file $class

echo -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 ------------------------------------

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧城市管理的得力助手——无人机管理平台

近年来&#xff0c;随着无人机技术的迅猛发展&#xff0c;无人机管理平台应运而生&#xff0c;成为这一行业的重要基础设施。该平台充分利用智能无人机管理和物联网技术&#xff0c;实现了对城市重要领域的精细化动态管控。 一、无人机管理平台的特点 1、全方位数据获取&#…

Vue3使用LeaderLine

LeaderLine官方文档在这里 1.安装插件 npm install leader-line-vue 2.导出LeaderLine import LeaderLine from leader-line-vue; 3.创建连接线 let line LeaderLine.setLine(startElement, endElement, { startPlug: disc, endPlug: disc,color: white, size: 2 }); …

XSS骚操作

在网上看到的xss无字母的一个骚操作&#xff0c;可以先看一下下面这两个代码&#xff1a; 那么xss也是可以这样的&#xff0c;比如&#xff1a; 实战效果&#xff1a; 这里先将这个编码一下&#xff0c;直接塞到靶场看效果&#xff1a; alert(1)的编译代码&#xff1a; X[![]]!…

【Android】使用intent.putExtra()方法在启动Activity时传递数据

食用方法 在Android中&#xff0c;你可以使用Intent对象来在启动Activity时传递数据。以下是一个示例&#xff0c;展示了如何在startActivity时传递数据到被启动的Activity&#xff1a; 在启动Activity的地方&#xff0c;创建一个Intent对象&#xff0c;并使用putExtra()方法…

Java开发项目之KTV点歌系统设计和实现

项目介绍 本系统实现KTV点歌管理的信息化&#xff0c;可以方便管理员进行更加方便快捷的管理。系统的主要使用者分为管理员和普通用户。 管理员功能模块&#xff1a; 个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理。 普通用户功能模块&#xff1a; 个人中心…

AC-DC 220V转12V 500毫安非隔离恒压恒流降压芯片

AC-DC 220V转12V 500毫安非隔离恒压恒流降压芯片是一款高性能的电源管理芯片&#xff0c;它能够将220V的交流电压降低到12V直流电压&#xff0c;并且具有恒压恒流输出、多模式控制、低待机功耗、高精度输出、内置软启动、多种保护功能等特点。 该芯片的非隔离系统恒压恒流输出可…

浅析什么是组态图和组态图设计

随着计算机技术和工业自动化水平迅速提高&#xff0c;而车间现场种类繁杂的控制设备和过程监控装置使得传统的工业控制软件无法满足用户的各种需求。在“组态”概念出现之前&#xff0c;工程技术人员需要通过编写程序来实现某一任务&#xff0c;不但工作量大、周期长&#xff0…

深度学习手势检测与识别算法 - opencv python 计算机竞赛

文章目录 0 前言1 实现效果2 技术原理2.1 手部检测2.1.1 基于肤色空间的手势检测方法2.1.2 基于运动的手势检测方法2.1.3 基于边缘的手势检测方法2.1.4 基于模板的手势检测方法2.1.5 基于机器学习的手势检测方法 3 手部识别3.1 SSD网络3.2 数据集3.3 最终改进的网络结构 4 最后…

揭秘各种编程语言在不同领域中的精彩表现

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

golang 函数选项模式

一 什么是函数选项模式 函数选项模式允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构。我们将这些函数称为选项&#xff0c;由此得名函数选项模式。 例子&#xff1a; 有业务实体Animal结构体&#xff0c;构造函数NewAnimal&#xff08;&#xff09;&…

【opencv】计算机视觉基础知识

目录 前言 1、什么是计算机视觉 2、图片处理基础操作 2.1 图片处理&#xff1a;读入图像 2.2 图片处理&#xff1a;显示图像 2.3 图片处理&#xff1a;图像保存 3、图像处理入门基础 3.1 图像成像原理介绍 3.2 图像分类 3.2.1 二值图像 3.2.2灰度图像 3.2.3彩色图像…

Unity DOTS《群体战斗弹幕游戏》核心技术分析之3D角色动画

最近DOTS发布了正式的版本, 我们来分享现在流行基于群体战斗的弹幕类游戏&#xff0c;实现的核心原理。今天给大家介绍大规模战斗群体3D角色的动画如何来实现。 DOTS 对角色动画支持的局限性 截止到Unity DOTS发布的版本1.0.16,目前还是无法很好的支持3D角色动画。在DOTS 的b…

iOS系统上待办事项提醒软件哪个好

在这个快节奏的生活中&#xff0c;各种待办事项充斥了我们的日常工作和生活&#xff0c;尤其对于像我这样的iPhone用户而言&#xff0c;一款能够在iOS系统上快速和准确记录和提醒待办事项的软件&#xff0c;显得至关重要。 正如前几天&#xff0c;我正沉浸在工作中的时突然被领…

采购流程的简要概述

外部采购流程 一般来讲&#xff0c;企业的采购业务一般是对外采购活动&#xff0c;一个比较典型采购业务循环通常包括&#xff1a;需求提报、货源确定和供应商选择、采购订单处理、采购订单状态跟踪监控、到厂收货、发票校验、付款。 以下对几个节点进行详细的解释&#xff…

亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试

近日&#xff0c;在中国信通院“可信数据库”数据库迁移工具专项测试中&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧科技&#xff09;数据库数据同步平台V2.1产品依据《数据库迁移工具能力要求》、结合亚信科技AntDB分布式关系型数据库产品&…

JavaScript添加快捷键、取消浏览器默认的快捷操作、js查看键盘按钮keycode值

document.addEventListener("keydown",function (event) {// 如果不知道按键对应的数字&#xff08;keyCode&#xff09;是多少可以弹出查看一下// alert(event.keyCode)if (event.ctrlKey && event.altKey && event.view["0"] null){if(…

苹果手机格式化后数据还能恢复吗?本文将解答您的疑惑!

手机已经成为我们生活中不可或缺的一部分。然而&#xff0c;有时候我们会因为一些原因对手机进行格式化&#xff0c;从而造成数据的丢失。那么&#xff0c;手机格式化后数据还能恢复吗&#xff1f;本文将为大家详细解答这一问题&#xff0c;感兴趣的小伙伴请接着往下看&#xf…

java 对象大小计算

说明&#xff1a; 对于64位机&#xff1a;一个对象由三部分组成 对象头(object header) mark word &#xff1a;64bitkclass pointer &#xff1a;32bit(默认使用指针压缩)&#xff0c;如果取消指针压缩( XX:-UseCompressedOops)&#xff0c;则占用64bit数组长度&#xff1a;数…

38 - MySQL中InnoDB的知识点

InnoDB 存储引擎作为我们最常用到的存储引擎之一&#xff0c;充分熟悉它的的实现和运行原理&#xff0c;有助于我们更好地创建和维护数据库表。 1、InnoDB 体系架构 InnoDB 主要包括了内存池、后台线程以及存储文件。内存池又是由多个内存块组成的&#xff0c;主要包括缓存磁…

WordPress(10)解决中文连接问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、修改的前后二、自定义结构讲明三、修改方法前言 提示:这里可以添加本文要记录的大概内容: 1.中文连接如:http://www.lplovemm.love/2023/11/12/测试 2.这种连接在提交sitemap收录的时…