Linux shell for jar test

news2024/9/30 10:57:46

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

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

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

相关文章

Redis 两种持久化方式 AOF 和 RDB

目录 一、Redis 的持久化 二、Redis 的持久化方式 RDB RDB 介绍 RDB 的触发方式&#xff1a;. 三、RDB的文件生成策略 四、Save 和 Bgsave 命令的区别 六、RDB 最佳配置 七、触发机制-不容忽略方式 AOF 一、AOF介绍 二、RDB所存在的问题 三、AOF 三种策略 四、AOF…

linux zsh终端美化

目前的centos系统默认的shell还是bash&#xff0c;但是zsh被称为终极shell&#xff0c;国外有个程序员开发出了一个能够让你快速上手的zsh项目&#xff0c;叫做「oh my zsh」&#xff0c;Github 网址是&#xff1a;https://github.com/robbyrussell/oh-my-zsh 有了这玩意zsh用起…

vue3中的动态component组件

is属性来指定要渲染的组件(填写组件名&#xff09; 多个子组件通过component标签挂载在同一个父组件中&#xff0c; 可以修改is属性进行动态切换组件。 可以搭配<keep-alive></keep-alive>使用。 父组件代码&#xff1a; <template><div style"fon…

Linux系统下查询指定网卡的型号及用途

接到应用侧的特殊要求&#xff0c;需要查询服务器上特定网口的物理型号及配置用途&#xff0c;发现没有一条现成指令可以完成此事。经测试&#xff0c;可按以下步骤执行3条命令来组合完成。 一、使用lspci命令来查询指定网卡的型号 按照以下步骤进行操作&#xff1a; 打开终…

基于振弦式轴力计和采集仪的安全监测解决方案

基于振弦式轴力计和采集仪的安全监测解决方案 振弦式轴力计是一种测量结构物轴向力的设备&#xff0c;通过测量结构物上的振弦振幅变化&#xff0c;可以确定结构物轴向力的大小。采集仪是一种用于采集和存储传感器数据的设备&#xff0c;通常与振弦式轴力计一起使用&#xff0c…

【无标题】【教3妹学编程-算法题】设计前中后队列

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 又一波寒潮来袭&#xff0c; 外面风吹的呼呼的。 3妹&#xff1a;今天还有雨&#xff0c;2哥上班记得带伞。 2哥 : 好的 3妹&#xff1a;哼&#xff0c;不喜欢冬天&#xff0c;也不喜欢下雨天&#xff0c;要是我会咒语…

FPGA模块——DA转换模块(AD9708类)

FPGA模块——DA转换模块&#xff08;AD9708类&#xff09; AD9708/3PD9708代码 AD9708/3PD9708 由于电路接了反相器&#xff0c;所以对应就不一样了。 电路图&#xff1a; 代码 在ROM中存入要输出的波形数据&#xff1a; 用软件生成各个对应的点。 给DA转换器一个时钟&…

JAVA配置jdk17 Graa1VM

按照网上内容下载好对应的jdk17版本的Graa1VM&#xff0c; 解压后&#xff0c;修改环境变量中的JAVA_HOME为当前的目录&#xff0c;例如 D:\ruanjian\jdk\gra_jdk17\graalvm-ce-java17-22.3.0 。 然后在命令行中输入java -version的时候&#xff0c; 返回的并不是 Graa1VM 相关…

java导入数据代码示例

1. 导入所需的库 java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.Proxy; import org.openqa.selenium.chrome.ChromeOptio…

1146:吃糖果(C语言)

题目描述 HOHO&#xff0c;终于从Speakless手上赢走了所有的糖果&#xff0c;是Gardon吃糖果时有个特殊的癖好&#xff0c;就是不喜欢连续两次吃一样的糖果&#xff0c;喜欢先吃一颗A种类的糖果&#xff0c;下一次换一种口味&#xff0c;吃一颗B种类的糖果&#xff0c;这样&…

振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(5)

注解目录 1、znFAT 的起源 1.1 源于论坛 &#xff08;那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。&#xff09; 1.2 硬盘 MP3 推了我一把 &#xff08;“坤哥”的硬盘 MP3 播放器&#xff0c;让我深陷 FAT 文件系统不能自拔。&#xff09; 1.3 我…

VQ一下Key,Transformer的复杂度就变成线性了

©PaperWeekly 原创 作者 | 苏剑林 单位 | 月之暗面 研究方向 | NLP、神经网络 Efficient Transformer&#xff0c;泛指一切致力于降低 Transformer 的二次复杂度的工作&#xff0c;开始特指针对 Attention 的改进&#xff0c;后来更一般的思路&#xff0c;如傅立叶变换、…

Linux文件系统以及动静态库

目录 一、系统 I/O 1.1 接口介绍 1.2 系统调用和库函数 1.3 文件描述符 1.4 重定向 二、理解文件系统 2.1 inode 2.2 硬链接 2.3 软连接 三、动静态库 3.1 初识动静态库 3.2 静态库的打包与使用 3.2.1 打包 3.2.2 使用 3.3 动态库的打包与使用 3.3.1 打包 3.3…

四川劳动保障杂志社四川劳动保障编辑部四川劳动保障杂志2023年第10期目录

主题报道 四川抢抓“金九银十”招聘季多措并举稳就业促就业 举措频“上新” 金秋送岗忙 张玉芳; 2-5 法眼《四川劳动保障》投稿&#xff1a;cnqikantg126.com 筑牢长期护理保险基金安全防线 李科仲;赖晓薇; 6-7 调研 提升职业技能培训工作的举措 寇爵; 8-9 城乡…

2023.11.26 关于 Spring Boot 单元测试

目录 单元测试 优势 单元测试的使用 具体步骤 实现不污染数据库 阅读下面文章之前 建议点击下方链接了解 MyBatis 的创建与使用 MyBatis 的配置与使用 单元测试 单元测试 指对软件中的最小可测试单元进行检查和验证的过程单元测试 由开发人员在编码阶段完成&#xff0c;…

销售人员应该具备哪些良好心态和素养

销售人员应该具备哪些良好心态和素养 作为市场的前线战士&#xff0c;销售人员的心态与素养对于成功销售至关重要。以下所列举的&#xff0c;正是销售人员不可或缺的十种良好心态与专业素养&#xff0c;它们将帮助你更好地应对销售挑战&#xff0c;提升业绩。 1. 积极乐观的态…

11.盛最多的水的容器

一、题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 题目难度&#xff1a;中等 示例&a…

【备忘录】快速回忆ElasticSearch的CRUD

导引——第一条ElasticSearch语句 测试分词器 POST /_analyze {"text":"黑马程序员学习java太棒了","analyzer": "ik_smart" }概念 语法规则 HTTP_METHOD /index/_action/IDHTTP_METHOD 是 HTTP 请求的方法&#xff0c;常见的包括…

Flask 运用Xterm实现交互终端

Xterm是一个基于X Window System的终端仿真器&#xff08;Terminal Emulator&#xff09;。Xterm最初由MIT开发&#xff0c;它允许用户在X Window环境下运行文本终端程序。Xterm提供了一个图形界面终端&#xff0c;使用户能够在图形桌面环境中运行命令行程序。而xterm.js是一个…

物理世界中的等距3D对抗样本

论文题目&#xff1a;Isometric 3D Adversarial Examples in the Physical World 会议&#xff1a;NIPS 2022 点云&#xff1a; 点云——表达目标空间分布和目标表面特性的海量点集合&#xff0c;点包含xyz坐标信息 能够包含颜色等其他信息 使用顶点、边和面的数据表征的三维…