【Linux】如何用shell脚本一键安装Java和Maven环境

news2024/9/30 6:09:57

Shell脚本安装环境

  • 前言
  • 脚本
    • Java安装脚本
      • 使用方式
    • Java卸载脚本
    • Maven安装脚本
    • Maven卸载脚本

前言

无论是在云服务器上部署Java项目 还是在本地的Linux虚拟机上运行Java项目 都需要Java的环境 设置环境则需要一些繁琐的操作 为了简化并复用这些操作 我们可以封装这些操作为一个脚本 下面将展示shell脚本的具体写法 读者可以顺便复习一下Shell脚本的一些知识

脚本

Java安装脚本

#!/bin/sh

# 从命令行参数获取JDK源文件和目标目录
if [ "$#" -ne 2 ]; then
    echo "请提供正确的参数 首位为JDK压缩包路径 次位为JDK安装路径"
    exit 1
fi

JDK_SRC="$1"
JDK_DST="$2"

# 检查JDK源文件是否存在
if [ ! -f "$JDK_SRC" ]; then
    echo "JDK 安装文件不存在: $JDK_SRC"
    exit 1
fi

# 创建目标目录
mkdir -p "$JDK_DST"

# 复制JDK压缩包到目标目录
cp "$JDK_SRC" "$JDK_DST"

# 进入目标目录
cd "$JDK_DST"

# 解压JDK压缩包
tar -zxvf "$(basename "$JDK_SRC")"

# 获取解压后的JDK目录名称
JDK_DIR=$(tar -tzf "$(basename "$JDK_SRC")" | head -1 | cut -f1 -d"/")

# 配置环境变量
echo "export JAVA_HOME=$JDK_DST/$JDK_DIR" >> /etc/profile
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> /etc/profile
echo "export CLASSPATH=\$JAVA_HOME/jre/lib/ext:\$JAVA_HOME/lib/tools.jar" >> /etc/profile

# 使环境变量立即生效
source /etc/profile

# 输出安装完成
echo "Java installation completed."

# 输出Java版本
java -version

# 结束脚本
exit 0

使用方式

首先保存脚本为文件 可以首先创建一个空白文件 之后为赋给它执行权限

touch 文件名.sh
chmod +x 文件名.sh

在保证你已经上传了jdk的安装包之后 按照下面的方式进行
在这里插入图片描述
如图 我在/dev-ops下放置了java文件夹 并想要解压在这里 我可以这样使用这个脚本

sh install-java-script.sh /dev-ops/jdk-8u202-linux-x64.tar.gz /dev-ops/java

第一个参数是jdk的压缩包路径 而第二个是需要设置以及安装的环境变量的路径
注意: 执行此脚本之后仍有概率出现java -version时无法识别java命令 这时候需要再次刷新环境变量配置

 source /etc/profile

如果刷新之后仍然无法看到版本 可以查看一下脚本执行是否出现了错误

Java卸载脚本

#!/bin/sh

# 检查是否提供了JDK目标目录作为参数
if [ -z "$1" ]; then
    echo "请提供JDK目标目录作为参数!"
    exit 1
fi

# 使用第一个参数作为JDK目标目录
JDK_DST="$1"

# 获取JDK目录名称
if [ -d "$JDK_DST" ]; then
    JDK_DIR=$(ls "$JDK_DST" | grep 'jdk' | head -n 1)
else
    echo "JDK 目录不存在: $JDK_DST"
    exit 1
fi

# 删除JDK目录
echo "正在删除JDK目录..."
rm -rf "$JDK_DST/$JDK_DIR"

# 检查是否删除成功
if [ -d "$JDK_DST/$JDK_DIR" ]; then
    echo "JDK 目录删除失败."
    exit 1
else
    echo "JDK 目录已删除."
fi

# 移除环境变量配置
echo "正在移除环境变量配置..."
sed -i '/JAVA_HOME/d' /etc/profile
sed -i '/CLASSPATH/d' /etc/profile

# 重新加载环境变量
source /etc/profile

# 输出卸载完成
echo "Java remove completed."

# 结束脚本
exit 0

使用的方式是类似的 传入JDK安装时的目录即可

Maven安装脚本

#!/bin/bash

# 检查参数数量
if [ "$#" -ne 3 ]; then
    echo "请提供正确参数 第一位参数为Maven压缩包 第二位为要安装到的路径 第三位为文件夹名称"
    exit 1
fi

# 从命令行参数获取值
SOURCE_ZIP="$1"
TARGET_DIR="$2"
MAVEN_DIR_NAME="$3"
MAVEN_HOME="$TARGET_DIR/$MAVEN_DIR_NAME"

# 确保目标目录存在
mkdir -p "$TARGET_DIR"

# 复制zip文件到目标目录
cp "$SOURCE_ZIP" "$TARGET_DIR"

# 进入目标目录
cd "$TARGET_DIR"

# 解压缩文件
unzip "$SOURCE_ZIP"

# 配置环境变量并写入到 /etc/profile
echo "export MAVEN_HOME=$MAVEN_HOME" >> /etc/profile
echo 'export PATH=$PATH:$MAVEN_HOME/bin' >> /etc/profile

# 使环境变量配置立即生效
source /etc/profile

# 输出安装完成信息
echo "Maven installation completed."

# 显示Maven版本
mvn -version

使用方式同上

Maven卸载脚本

#!/bin/bash

# 检查是否提供了足够的参数
if [ -z "$1" ] || [ -z "$2" ]; then
    echo "请提供Maven目标目录和Maven目录名称作为参数!"
    echo "用法: $0 <target_directory> <maven_directory_name>"
    exit 1
fi

# 使用第一个参数作为TARGET_DIR
TARGET_DIR="$1"

# 使用第二个参数作为MAVEN_DIR_NAME
MAVEN_DIR_NAME="$2"

# 定义MAVEN_HOME
MAVEN_HOME="$TARGET_DIR/$MAVEN_DIR_NAME"

# 删除 Maven 目录
if [ -d "$MAVEN_HOME" ]; then
    rm -rf "$MAVEN_HOME"
    echo "Maven directory $MAVEN_HOME has been removed."
else
    echo "Maven directory $MAVEN_HOME does not exist."
fi

# 备份 /etc/profile
cp /etc/profile /etc/profile.bak

# 从 /etc/profile 中移除 Maven 环境变量
sed -i '/^export MAVEN_HOME/d' /etc/profile
sed -i '/^export PATH=\$PATH:\$MAVEN_HOME\/bin/d' /etc/profile

# 重新加载 /etc/profile
source /etc/profile

# 输出卸载完成信息
echo "Maven has been uninstalled."

# 结束脚本
exit 0

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

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

相关文章

AD导出gerber文件(光绘文件)

第一步&#xff1a; 英寸 2:5 勾选你想显示的层 默认默认 第二步&#xff1a; 第三步&#xff1a; 默认

开关电源为什么要进行负载测试,负载测试都包含哪些项目?

开关电源在现代电子设备中占据着重要的地位&#xff0c;其性能的稳定性和可靠性直接影响着电子设备的正常运行。为了确保开关电源的质量&#xff0c;需要对其进行负载测试。负载测试可以模拟实际工作环境中的负载情况&#xff0c;检测开关电源在不同负载条件下的输出特性、稳定…

如何创建虚拟环境并实现目标检测及验证能否GPU加速

创建虚拟环境&#xff1a; 先创建一个虚拟python环境&#xff0c;敲如下代码 然后再到该虚拟环境里面安装自己想要的包 激活虚拟环境 然后再聚类训练这些 验证GPU加速 阿里源 pip install torch torchvision -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mir…

Python的风格应该是怎样的?除语法外,有哪些规范?

写代码不那么pythonic风格的&#xff0c;多多少少都会让人有点难受。 什么是pythonic呢&#xff1f;简而言之&#xff0c;这是一种写代码时遵守的规范&#xff0c;主打简洁、清晰、可读性高&#xff0c;符合PEP 8&#xff08;Python代码样式指南&#xff09;约定的模式。 Pyth…

线段树及应用

目录 1. 线段树基础 &#xff08;1&#xff09;什么是线段树 &#xff08;2&#xff09;线段树的拆分原理 &#xff08;3&#xff09;相关算法对比 &#xff08;4&#xff09;线段树的使用前提 &#xff08;5&#xff09;线段树建树操作 &#xff08;6&#xff09;线段树…

Unity 编辑器多开

开发多人联机的功能时大多数会遇到测试机不方便的问题。想多开同一个项目Uinty又禁止。。。因为在使用Unity Editor打开一个项目时&#xff0c;Unity Editor会在项目目录建立一个Temp目录&#xff0c;同时对里面的一个UnityLockfile文件进行加锁。SO...可以使用以下方法进行多开…

macOS 开发环境配置与应用开发

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

【CSS Tricks】css动画详解

目录 引言动画关键帧序列动画各属性拆解1. animation-name2. animation-duration3. animation-delay设置delay为正值设置delay为负值 4. animation-direction5. animation-iteration-count6. animation-fill-mode7. animation-play-state8. animation-timing-function非阶跃函数…

【2025】基于Django的鱼类科普网站(源码+文档+调试+答疑)

文章目录 一、基于Django的鱼类科普网站-项目介绍二、基于Django的鱼类科普网站-开发环境三、基于Django的鱼类科普网站-系统展示四、基于Django的鱼类科普网站-代码展示五、基于Django的鱼类科普网站-项目文档展示六、基于Django的鱼类科普网站-项目总结 大家可以帮忙点赞、收…

B3621 枚举元组

1.递归的具体过程&#xff0c;一个dfs1&#xff0c;产生3个dfs2&#xff0c;一个dfs2产生3个dfs3&#xff0c;一共输出9个&#xff08;用n2&#xff0c;k3举例&#xff09; 2.要记得使用return 结束当前递归 #include<bits/stdc.h> using namespace std; int n, k, a[10…

telnet发送邮件教程:安全配置与操作指南?

telnet发送邮件的详细步骤&#xff1f;怎么用telnet命令发邮件&#xff1f; 尽管现代邮件客户端和服务器提供了丰富的功能和安全性保障&#xff0c;但在某些特定场景下&#xff0c;了解如何使用telnet发送邮件仍然是一项有价值的技能。AokSend将详细介绍如何安全配置和操作tel…

英集芯IP5911:集成锂电池充电管理和检测唤醒功能的低功耗8位MCU芯片

英集芯IP5911是一款集成锂电池充电管理、咪头检测唤醒、负载电阻插拔和阻值检测等功能的8bit MCU芯片。其封装采用QFN16&#xff0c;应用时仅需极少的外围器件&#xff0c;就能够有效减小整体方案的尺寸&#xff0c;降低BOM成本&#xff0c;为小型电子设备提供高集成度的解决方…

QT 开发日志:QT 布局管理 —— 如何使用布局器组织 UI 元素

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

探索高效免费的PDF转Word工具,开启便捷办公之旅

无论是为了方便对文档内容进行编辑、修改&#xff0c;还是为了更好地适应不同的工作和学习场景&#xff0c;将 PDF 文档转换为可编辑的 Word 格式都具有重要意义。今天我就分享几款pdf转换成word免费版工具来解决大家的困扰。 1.Foxit PDF转换大师 链接一下>>https://w…

系统架构设计师-知识产权与标准化

目录 一、保护范围与对象 二、保护期限 三、知识产权人确定 四、侵权判断 五、标准化 一、保护范围与对象 知识产权是权利人依法就下列课题享有的专有权利&#xff1a; &#xff08;一&#xff09;作品&#xff08;著作&#xff09; &#xff08;二&#xff09;发明、实用…

通过OpenScada在ARMxy边缘计算网关上实现远程监控

随着工业互联网技术的发展&#xff0c;边缘计算逐渐成为连接物理世界与数字世界的桥梁。在众多边缘计算设备中&#xff0c;ARMxy BL340系列因其强大的性能、灵活的I/O配置及广泛的适用性&#xff0c;成为了工业控制、物联网关等领域的优选方案之一。 一、ARMxy BL340系列概述 …

波导阵列天线 馈电网络2 一种使用有着多反射零点的T型结的毫米波48%带宽高增益3D打印天线阵列

摘要&#xff1a; 一种设计毫米波宽带大规模天线阵列的创新方法被提出了&#xff0c;其使用有着多个反射零点的波导T型结来构建一个H型全公共馈网。通过联合优化反射零点的性质&#xff0c;可以减弱馈网中不期望的小反射的同相叠加&#xff0c;因此提升阵列的带宽。调研了合成有…

04 B-树

目录 常见的搜索结构B-树概念B-树的插入分析B-树的插入实现B树和B*树B-树的应用 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O( l o g 2 N log_2N log2​N)二分搜索树无要求O(N)二叉平衡树无要求O( l o g 2 N log_2N log2​N)哈希无要求O(1) 以…

[网络]NAT、代理服务、内网穿透、内网打洞

目录 一、NAT 1.1 NAT 技术背景 1.2 NAT IP 转换过程 1.3 NAPT&#xff08;Network Address Port Translation&#xff09; 1.地址转换表 2. NAPT&#xff08;网络地址端口转换Network Address Port Translation&#xff09; 3. NAT技术的缺陷 二、代理服务器 2.1 正向…

麒麟桌面系统安装和配置Node.js

1.官网下载tar.xz文件 Node.js — 在任何地方运行 JavaScript 2.解压 可以双击直接窗口解压&#xff0c;也可以使用如下命令进行解压&#xff1a; xz -d xxx.tar.xz&#xff1b; tar -xvf xxx.tar 可以解压到usr目录或者其他目录。 3. 配置环境 解压完毕后&#xff0c…