在Linux中使用shell脚本自动化安装jdk1.8和mysql5.7

Posted Z-hhhhh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linux中使用shell脚本自动化安装jdk1.8和mysql5.7相关的知识,希望对你有一定的参考价值。

写在前面

如果你是在windows里写好,直接拖到虚拟机运行脚本,可能会遇到一些问题,如:

bad interpreter: No such file or directory 

方式①:这种情况,可以在非编辑模式下 输入 :set fileformat=unix 然后后执行:x或者:wq 或者 快捷键shift+z+z(按住shift的同时 两次按z, 这个快捷键在英文小写的情况下,才能使用)保存修改。然后再运行脚本,就可以了。
方式②:直接执行sed -i “s/\\r//” a.sh来转化,之后再执行脚本
方式③:直接执行dos2unix a.sh来转化,之后再执行脚本

解决这个问题,就可以愉快的直接再Linux上运行脚本了。

一、安装jdk

1.1、装备工作
在opt/目录下准备两个文件夹 download (用于放jdk压缩包)和software (安装位置)
需要把jdk安装包放在download文件夹下
(如果不一样,需要改脚本中的地址)


#!/bin/bash
#环境变量文件的地址
ENV_DIR='/etc/profile.d/myenv.sh'
#绿色安装根目录
SOFTWARE_DIR='/opt/software/'
#安装源文件目录
DOWNLOAD_DIR='/opt/download/'
####### JDK安装 ########
#### 清除历史痕迹
#通过jps命令的执行结果判定java环境变量是否存在,如果存在则删除
RST=`jps`
if [[ $RST=~^\\d+\\sJps$ ]]
then
    #检索环境变量配置文件确定jdk环境变量是否存在
    RST=`cat $ENV_DIR|grep '#jdk'`
    if [[ $RST ]]
    then
        #定位jdk环境变量的位置并删除
        sed -rin '/#.*?jdk/,+4d' $ENV_DIR
        echo 'jdk env removed'
    else
        echo 'jdk env exists but no config in myenv.sh'
    fi
else
    echo 'no jdk env'
fi

#检查安装目录下是否存在已解压的jdk目录,如果存在则删除
RST=`ls /opt/software|grep jdk*`
if [[ $RST ]]
then
    #递归删除已安装的jdk目录
    rm -rf $SOFTWARE_DIR$RST
else
    echo 'no jdk dir'
fi

#每次添加新环境变量前激活一次
source /etc/profile

#检查自定义环境变量源文件myenv.sh是否存在,不存在则创建
ENV_DIR="/etc/profile.d/"
RST=`ls $ENV_DIR|grep myenv.sh`
if [[ -z $RST ]]
then
        ENV_DIR=$ENV_DIR'myenv.sh'
        eval touch $ENV_DIR
    #新建的空文件无法通过sed修改内容,因此创建文件后使用流重定向先行添加一行
        echo '#end'>$ENV_DIR
        echo $ENV_DIR' created'
else
        ENV_DIR=$ENV_DIR'myenv.sh'
        echo $ENV_DIR' existed'         
fi
echo 'ENV_DIR : '$ENV_DIR

#解压缩jdk tar包到目标路径
RST=(`ls $DOWNLOAD_DIR|grep jdk`)
if [ $#RST[@] -gt 0 ]
then
        RST=$RST[0]
        tar -zxf $DOWNLOAD_DIR$RST -C $SOFTWARE_DIR
        eval mv $SOFTWARE_DIR'jdk*' $SOFTWARE_DIR'jdk'
        echo 'jdk uncompressed'
else
        echo 'no jdk source in '$DOWNLOAD_DIR
fi

#构建jdk环境变量列表字符串
JAVA_ENV='CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH'"
JAVA_HOME=$SOFTWARE_DIR"'jdk
#jdk'

#在首行之前插入空行
sed -in '1x;p;x' $ENV_DIR

#将jdk环境变量列表加入myenv.sh
for item in $JAVA_ENV
do
        sed -in "1i$item/-/ " $ENV_DIR
        echo  $item/-/ ' appended'
done

#每次添加完新环境变量后再次激活
source /etc/profile
echo 'jdk env variables activated'

二、安装mysql5.7

#!/bin/bash
cd ~
ARSL=`pwd`
ARSL="$ARSL/.ALLOW_RM_SRC_LOG"
cd -

function checkAndRecord()
    if [ ! -e $ARSL ]
    then
        eval touch $ARSL
    fi
    RST=`eval cat $ARSL|grep $1`
    if [ -z $RST ]
    then
      echo $1>>$ARSL
    fi


function stopService()
    RST=`systemctl status mysqld|grep ' active (.*)'`

    if [ -n "$RST" ]
    then
      echo -n "service $1 is active running ... "
        systemctl stop $1
         RST=`systemctl status $1|grep ' active (.*)'`
    if [[ $RST ]]
    then
        echo 'but fail to close'
        exit -1
    else
        echo 'and succeed in closing'
         fi
    else
        echo "service $1 is inactive dead"
    fi


function removeRpm()
    RST=`cat $ARSL|grep $1`
    if [  $RST ]
    then
        RST=`rpm -qa|grep $1`
        echo "===================yum remove $1==========="
        for i in $RST
        do
            yum -y remove $i>/dev/null 2>&1
             echo $i"... removed"
        done
        echo "=================================================="

        RST=`find / -name $1`
        ehco "=============clear $1 left resource==============="
        for i in $RST
        do
            rm -rf $i
        done
        echo "=================================================="
        rm -f $2".*"
        echo "$1 left resource $2 has benn removed "
    else
        echo "WARN : you are trying to remove $1 which is not allowed "
    fi


# rpm安装:兼容远程安装和本地安装(提供rpm资源的完整路径)
function installRpm()
    RST=$1
    ISERNAME=$2
    SSERNAME=$3
    if [[ $RST=~^http ]];then
        echo "rpm install $RST ..."
        wget $RST
        RST=`basename $RST`
    fi
    rpm -ivh $RST
    yum -y install $ISERNAME
    DIR="$4.cnf"
    if [ -e $DIR ]
    then
        cat $DIR>$5
        echo "$4 configuration has been overwrtiten "
    else
        echo "there may be chinese random code for lack of $DIR"
    fi
    systemctl start  $SSERNAME
    checkAndRecord $4
    echo "$ISERNAME installed"


stopService mysqld
removeRpm mysqld /etc/my.cnf.rpm
SRC="https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm"
installRpm $SRC mysql-server mysqld mysql /etc/my.cnf

三、mysql初始化

第二步的脚本运行结束后,检查一下
systemctl status mysqld
如果是running 就没问题,

如果你原来安装过Mysql,再安装时原来的数据库还会存在
可以通过以下命令删除原来数据库
rm -rf /var/lib/mysql

3.1 登录

1、最简单的方式
通过命令,获得临时密码
grep ‘temporary password’ /var/log/mysqld.log

复制这个密码,用它先登录
mysql -u root -p
然后输入上面的密码就可以登录,登录后无法进行别的操作,会强制你修改密码,如图

alter user ‘root’@‘localhost’ identified by 'PASSword000’;
mysql对密码的默认要求是包含字符大小写和数字,如果不想麻烦就设置一个符合要求的密码即可。
exit;退出
重新登录
mysql -u root -p
输入刚才设置的密码
PASSword000,就完成了。

2、跳过密码验证方式
重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:
vim /etc/my.cnf(注:windows下修改的是my.ini)
在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)
在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程

这位老哥写的更详细,可以看这里
原文链接:https://blog.csdn.net/wohiusdashi/article/details/89358071

3.2 设置字符集

首先需要关闭服务进行字符集配置
systemctl stop mysqld
vi /etc/my.cnf
把以下内容写进去

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

再重启服务即可

以上是关于在Linux中使用shell脚本自动化安装jdk1.8和mysql5.7的主要内容,如果未能解决你的问题,请参考以下文章

Centos7一键安装jdk1.8 shell脚本

linux下编写一个shell脚本,实现自动安装软件

linux crontab 自动运行shell脚本调用jar,crontab是执行了,但是shell没有调用jar是怎么回事?

HBase的基本使用(安装配置启动关闭hbash shell的基本操作)

shell脚本 自动安装问题

Linux安装单机版Hadoop使用shell脚本安装JDK和Hadoop和windows配置Hadoop环境