在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 '1{x;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的主要内容,如果未能解决你的问题,请参考以下文章
linux crontab 自动运行shell脚本调用jar,crontab是执行了,但是shell没有调用jar是怎么回事?