脚本安装java环境

在工作中,需要涉及到安装环境变量,如果机器太多就会导致花费大量的时间在配置环境上,如果有一个脚本,只需要把我们需要的安装包放在指定位置等待安装即可就可以减轻工作压力,因此本文意在减轻jdk环境变量的安装问题

注意事项:
1、jdk安装包,默认放在/root目录下面
2、java的安装目录在/usr/local/java/下
3、run.sh和check_jdk.sh 需要放在同一目录下

run.sh

#!/bin/bash

bashrc="/root/.bashrc"
profile="/etc/profile"
jdktarget="/usr/local/java"
jdkpath="/root/jdk*"
jdkfile=`find "${jdkpath%/*}" -name  "jdk*" 2>&1`
jdkcreate=0

# 判断jdk的安装目录是否存在
if [ ! -d "$jdktarget" ]; then
	echo "不存在$jdktarget文件,即将开始创建.."
	mkdir "$jdktarget"
	echo "$jdktarget文件创建完成"
	jdkcreate=1
else
	read  -p "是否覆盖jdk原文件(y/n)" -t 30 condition
	if [ ! -n "$condition" ]; then
		a=1
	elif [[ "$condition" -eq "y" ]] || [[ "$condition" == "Y" ]]; then
		echo "存在jdk文件夹,清空$jdktarget文件并重新创建"
                rm -rf $jdktarget/
                mkdir "$jdktarget"
		jdkcreate=1
	fi
fi

# 判断root文件下是否含有jdk文件夹
if [ ! -d "$jdkpath" ]; then
	existjdk=`find "$jdktarget/" -name "jdk1.8*" 2>&1`
	if [ ! -n "$existjdk" ];then
		echo "开始解压${jdkfile##*/}文件"
 	       	tar -zxf "/root/${jdkfile##*/}" -C $jdktarget
        	echo "解压完成"
	else	
		echo "已经安装${existjdk##*/}"
	fi
else	
	echo "不存在jdk文件,强制退出"
	exit 0
fi

#写入java环境变量并立刻生效
if [ $jdkcreate == 1 ]; then
	echo "开始添加jdk环境变量"
	echo "搜所之前的环境"
	length=`cat $profile  | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | wc -l 2>&1 `
	#可能存在一行,但是使空的一行
	words=`cat $profile  | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | wc -w 2>&1 `
	if [ $words == 0 ];then
		echo "$profile没有搜索到,开始加入新的java环境变量"
		jdkrealpath=`find ${jdktarget%/*} -name "jdk1.8*"`
        	echo '#----------JAVA_JDK--------------------' >> $profile
        	echo "export JAVA_HOME="$jdkrealpath"" >> $profile
        	echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $profile
        	echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> $profile 
		echo '#----------JAVA_JDK--------------------' >> $profile
	else
		echo "$profile存在添加的JAVA环境变量,重新导入"
        	for (( i=1; i<=$length; i=i+1));do
                	#获取匹配到配置信息的首行和末尾
                	java_line_a=`cat $profile | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | awk 'NR==1{print $1}' 2>&1`
                	java_line_b=`cat $profile | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | awk 'NR==1{print $2}' 2>&1`
                	#执行删除操作  带上-i否则不会原地删除
                	sed -i ${java_line_a}","${java_line_b}"d" $profile
        	done
		jdkrealpath=`find ${jdktarget%/*} -name "jdk1.8*"`
                echo '#----------JAVA_JDK--------------------' >> $profile
                echo "export JAVA_HOME="$jdkrealpath"" >> $profile
                echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $profile
                echo 'export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> $profile
                echo '#----------JAVA_JDK--------------------' >> $profile
	fi

	echo "$profile环境变量导入成功..."


	length=`cat $profile  | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | wc -l 2>&1 `
	#可能存在一行,但是使空的一行
        words=`cat $bashrc  | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | wc -w 2>&1`
        if [ $words == 0 ];then
        	echo "$bashrc没有搜索到,开始加入新的java环境变量"
                echo '#----------JAVA_JDK--------------------' >> $bashrc
                echo "JAVA_HOME="$jdkrealpath"" >> $bashrc
                echo 'PATH=$PATH:$JAVA_HOME/bin' >> $bashrc
                echo '#----------JAVA_JDK--------------------' >> $bashrc
                echo "$bashrc添加成功..."
        else
                echo "$bashrc存在添加的JAVA环境变量,重新导入"
                for (( i=1; i<=$length; i=i+1));do
                	#获取匹配到配置信息的首行和末尾
                        java_line_a=`cat $bashrc | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | awk 'NR==1{print $1}' 2>&1`
                        java_line_b=`cat $bashrc | grep -n "JAVA_JDK" | grep -Po "\d+" | xargs -n2 | awk 'NR==1{print $2}' 2>&1`
                        #执行删除操作  带上-i否则不会原地删除
                        sed -i "${java_line_a},${java_line_b}d" $bashrc
                done
                echo '#----------JAVA_JDK--------------------' >> $bashrc
                echo "JAVA_HOME="$jdkrealpath"" >> $bashrc
                echo 'PATH=$PATH:$JAVA_HOME/bin' >> $bashrc
                echo '#----------JAVA_JDK--------------------' >> $bashrc
        fi

	echo "$bashrc导入新的环境变量成功..."
	

	# 使环境变量生效
	. $profile
	. $bashrc
	
fi

#指定查看java -version版本的脚本,注意不能直接在当前shell脚本查看
jdkresult=`./check_jdk.sh`
if [ $jdkresult == 0 ];then
	exit 2
fi
	

check_jdk.sh

#!/bin/bash

function jdk()
{
	check_results=`java -version 2>&1`
	if [[ $check_results =~ "1.8." ]];then
        	java -version
        	echo "jdk安装完成"
        	return 1
	else
        	echo "jdk安装失败!"
        	return  0
	fi
}
echo $(jdk)

run.sh 是帮助我们直接安装的脚本,而check_jdk.sh则是检查java -version是否安装成功。因为想在一个shell脚本中使当前s追加到环境变量中的配置生效,必须使当前shell脚本退出以后才可以生效,因此我采用打开新的一个shell,在里面执行检查操作。

效果:
在这里插入图片描述


版权声明:本文为weixin_44272011原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。