文章目录
1. 前言
安装环境:
- 虚拟机:VMware Workstation Pro
- 本次使用Linux系统:CentOS 7.5 minimal
- CentOS下载地址:http://archive.kernel.org/centos-vault/7.5.1804/
2. Linux下JAVA自动安装脚本
- JDK1.8下载地址:官方网址
- 本次JDK版本:jdk-8u231-linux-x64.tar.gz
- 本次安装目录:/usr/local/
- 需要任意JDK安装包
- 将任意 JDK 版本的安装包拷贝到服务器根目录。
- 创建脚本并粘贴脚本命令:vim java_install.sh
- 给文件加执行权限:chmod +x java_install.sh
- 执行脚本:sh java_install.sh
- 重载系统环境:source /etc/profile
- 输入命令查看 java : java -version
#!/bin/bash
#offline jdk install
ipath="/usr/local"
installpath=$(cd `dirname $0`; pwd)
j=`whereis java`
java=$(echo ${j} | grep "jdk")
if [[ "$java" != "" ]]
then
echo "java was installed!"
else
echo "java not installed!"
echo;
echo;
echo "解压 jdk-*-linux-x64.tar.gz"
tar -zxvf jdk-*-linux-x64.tar.gz >/dev/null 2>&1
echo;
echo;
cd jdk* && jdkname=`pwd | awk -F '/' '{print $NF}'`
echo "获取jdk版本: ${jdkname}"
echo;
echo;
cd ${installpath}
echo "获取当前目录:${installpath}"
echo;
echo;
mv ${jdkname} ${ipath}
echo "转移${jdkname}文件到${ipath}安装目录"
echo "jdk安装目录:${ipath}/${jdkname}"
echo;
echo;
echo "#java jdk" >> /etc/profile
echo "export JAVA_HOME=${ipath}/${jdkname}" >> /etc/profile
echo 'export JRE_HOME=${JAVA_HOME}/jre' >> /etc/profile
echo 'export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib' >> /etc/profile
echo 'export PATH=${JAVA_HOME}/bin:$PATH' >> /etc/profile
source /etc/profile > /dev/null 2>&1
cd $HOME
rm jdk-*-linux-x64.tar.gz
echo "jdk 安装完毕!"
echo "请执行以下命令以使jdk环境生效"
echo "source /etc/profile"
fi
3. Linux下MySQL自动安装脚本
- MySQL安装包来源:华为开源镜像站
- MySQL下载地址:https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-5.6/mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz
- 本次MySQL 版本:mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz
- 本次安装目录:/usr/local/mysql
- 脚本的创建用户:mysql
- 脚本作者:左撇子帕布
- 需要mysql5.6安装包
- 将 MySQL 安装包拷贝到服务器根目录
- 安装一个依赖包:yum -y install autoconf
- 服务器根目录创建脚本并粘贴脚本命令:vim mysql_install.sh
- 安装并启动脚本:sh mysql_install.sh install
- 重载系统环境:source /etc/profile
- 登陆MySQL数据库:mysql -uroot -proot
- 脚本命令:
mysql启动:sh mysql_install.sh start
mysql关闭:sh mysql_install.sh stop
mysql重启:sh mysql_install.sh restart
mysql状态:sh mysql_install.sh check_status
mysql卸载:sh mysql_install.sh uninstall
#!/bin/bash
# Mysql安装包所在路径,需要带上包名,示例:PACKAGE_FULL_WAY=/root/mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz
readonly PACKAGE_FULL_WAY=mysql-5.6.44-linux-glibc2.12-x86_64.tar.gz
# Mysql安装主目录,示例:INSTALL_HOME=/usr/local/mysql
readonly INSTALL_HOME=/usr/local/mysql
# Mysql数据库root用户密码,示例:USER_PASSWD=root
readonly USER_PASSWD=root
# 检验用户
if [[ "$UID" -ne 0 ]]; then
echo "ERROR: the script must run as root"
exit 3
fi
function log_info() {
echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
}
function log_error() {
echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
exit 1
}
function check_result() {
local ret_code=$1
shift
local error_msg=$*
if [[ ${ret_code} -ne 0 ]]; then
log_error ${error_msg}
fi
}
# 校验参数
function check_param() {
if [[ ! -n ${PACKAGE_FULL_WAY} ]] || [[ ! -n ${INSTALL_HOME} ]] || [[ ! -n ${USER_PASSWD} ]]; then
log_error "Param: PACKAGE_FULL_WAY INSTALL_HOME USER_PASSWD can not be null"
fi
if [[ ! -f ${PACKAGE_FULL_WAY} ]]; then
log_error "Please check the config of PACKAGE_FULL_WAY dose config Mysql package name"
fi
}
function check_mysql_process() {
local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
if [[ ${mysql_process_count} -gt 0 ]]; then
log_error "please stop and uninstall the mysql first"
fi
}
# 新建mysql用户
function add_user() {
#create group mysql
grep "^mysql" /etc/group &> /dev/null
if [[ $? -ne 0 ]]; then
groupadd mysql
fi
#create user mysql
id mysql &> /dev/null
if [[ $? -ne 0 ]]; then
useradd -g mysql mysql
chage -M 99999 mysql
fi
}
# 安装Mysql
function install_mysql() {
# 创建安装主目录
mkdir -p ${INSTALL_HOME}
# 解压mysql到安装主目录
tar -zxvf ${PACKAGE_FULL_WAY} -C ${INSTALL_HOME} > /dev/null 2>&1
check_result $? "unzip Mysql package error"
local package_name=`ls ${INSTALL_HOME} |grep mysql`
mv ${INSTALL_HOME}/${package_name}/* ${INSTALL_HOME}
rm -rf ${INSTALL_HOME}/${package_name}
cd ${INSTALL_HOME}
# 新建数据库目录
mkdir -p ${INSTALL_HOME}/data/mysql
chown -R mysql:mysql ${INSTALL_HOME}
# 安装并指定用户和data文件夹位置
./scripts/mysql_install_db --user=mysql --datadir=${INSTALL_HOME}/data/mysql
# 复制mysql到服务自动启动里面
cp -pf ${INSTALL_HOME}/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
# 复制配置文件到etc下
cp -pf ${INSTALL_HOME}/support-files/my-default.cnf /etc/my.cnf
chmod 755 /etc/my.cnf
# 修改basedir和datadir
sed -i "s#^basedir=.*#basedir=${INSTALL_HOME}#" /etc/init.d/mysqld
sed -i "s#^datadir=.*#datadir=${INSTALL_HOME}\/data\/mysql#" /etc/init.d/mysqld
# 加入环境变量,方便使用mysql命令,但是需要source /etc/profile
echo "###MYSQL_PATH_ENV_S" >>/etc/profile
echo "export PATH=${INSTALL_HOME}/bin:\$PATH" >> /etc/profile
echo "###MYSQL_PATH_ENV_E" >> /etc/profile
# 启动Mysql
start
# 修改Mysql用户root密码
./bin/mysqladmin -u root -h localhost.localdomain password ${USER_PASSWD}
cd ${INSTALL_HOME}
# 开启远程登录权限
./bin/mysql -h127.0.0.1 -uroot -p${USER_PASSWD} << EOF
grant all privileges on *.* to root@'%' identified by 'root'; flush privileges;
EOF
chown -R mysql:mysql ${INSTALL_HOME}
}
# 安装Mysql
function install() {
log_info "+++++++++++ step 1 ++++++++++++++++"
check_param
log_info "check_param finish"
log_info "+++++++++++ step 2 ++++++++++++++++"
check_mysql_process
log_info "check_mysql_process finish"
log_info "+++++++++++ step 3 ++++++++++++++++"
add_user
log_info "add_user finish"
log_info "+++++++++++ step 4 ++++++++++++++++"
install_mysql
log_info "install_mysql finish"
}
# 卸载Mysql
function uninstall() {
# 如果Mysql仍启动则停止Msql
local mysql_process_count=`ps -ef |grep ${INSTALL_HOME}|grep -vwE "grep|vi|vim|tail|cat"|wc -l`
if [[ ${mysql_process_count} -gt 0 ]]; then
stop
fi
# 删除创建的文件
rm -rf ${INSTALL_HOME}
rm -rf /etc/init.d/mysqld
rm -rf /etc/my.cnf
# 删除sock文件
if [[ -f /tmp/mysql.sock ]]; then
rm -rf /tmp/mysql.sock
fi
# 删除配置的环境变量
sed -i '/###MYSQL_PATH_ENV_S/,/###MYSQL_PATH_ENV_E/d' /etc/profile
#删除用户和用户组
id mysql &> /dev/null
if [[ $? -eq 0 ]]; then
userdel mysql
fi
log_info "uninstall Mysql success"
}
# 停止Mysql
function stop() {
su - mysql -c "service mysqld stop"
}
# 启动Mysql
function start() {
su - mysql -c "service mysqld start"
}
# Mysql状态检查
function check_status() {
su - mysql -c "service mysqld status"
}
function usage() {
echo "Usage: $PROG_NAME {start|stop|install|uninstall|check_status}"
exit 2
}
PROG_NAME=$0
ACTION=$1
case "$ACTION" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
install)
install
;;
uninstall)
uninstall
;;
check_status)
check_status
;;
*)
usage
;;
esac
4. Linux下Nginx自动安装脚本
- Nginx下载地址:http://nginx.org/en/download.html
- Nginx手动安装教程 :http://nginx.org/en/linux_packages.html
- 本次 Nginx 版本:nginx-1.16.1.tar.gz
- 本次安装目录:/usr/local/nginx
- 脚本创建的用户:www
- 无需nginx安装包
- 服务器根目录创建脚本并粘贴脚本命令:vim nginx_install.sh
- 给脚本加执行权限:chmod +x nginx_install.sh
- 执行脚本并在命令后加入需要安装的版本号和安装目录:sh nginx_install.sh 1.16.1 /usr/lcoal/nginx
- 浏览器输入ip查看nginx页面。
#!/bin/bash
NGX_USR="www"
NGX_VER="$1" #第一个参数nginx版本号
NGX_YUM="yum -y install"
NGX_SRC="nginx-${NGX_VER}"
NGX_DIR="$2" #第二个参数自定义目录
NGX_URL="http://nginx.org/download"
NGX_SOFT="${NGX_SRC}.tar.gz"
NGX_ARGS="--user=$NGX_USR --group=$NGX_USR --with-http_stub_status_module"
if [ $# -ne 2 ]; then
echo "第一个参数请输入nginx版本号例如:1.16.1"
echo "第二个参数请输入nginx安装目录例如:/usr/local/nginx"
exit
else
cd $HOME
$NGX_YUM wget gzip tar make gcc
$NGX_YUM pcre pcre-devel zlib-devel openssl-devel
wget -c $NGX_URL/$NGX_SOFT #根据参数自动下载
ls -l $NGX_SOFT
tar -xzf $NGX_SOFT
cd $NGX_SRC
useradd -s /sbin/nologin $NGX_USR -M
./configure --prefix=$NGX_DIR $NGX_ARGS #安装路径
if [ $? -eq 0 ];then
make
else
echo "please chenck nginx error"
fi
if [ $? -eq 0 ];then
make install
else
echo "plase chenck install nginx error"
fi
$NGX_DIR/sbin/nginx #启动
cd $HOME
rm -rf $NGX_SRC #删除根文件夹文件夹
rm $NGX_SOFT #删除安装包
cp $NGX_DIR/sbin/nginx /usr/local/bin #添加全局环境
ps -ef|grep nginx
setenforce 0
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
fi
5. Linux下Tomcat自动安装脚本
- Tomcat下载地址:清华大学开源软件镜像站
- Tomcat版本:apache-tomcat-9.0.30.tar.gz
- 本次安装目录:/usr/lcoal/tomcat
- 无需tomcat安装包
- 服务器根目录创建脚本文件并粘贴命令:vim tomcat_install.sh
- 加上脚本执行权限:chmod +x tomcat_install.sh
- 执行脚本文件:sh tomcat_install.sh
- 打开浏览器输入ip加8080端口查看tomcat页面
#! /bin/bash
main_path=/usr/local/tomcat
install_name=apache-tomcat-9.0.30.tar.gz
env_fun()
{
echo "---检测本机环境----"
username=`ps -ef|grep apache-tomcat |grep -v grep`
if [[ -z $username ]]; then
echo "tomcat不存在"
return 10
else
echo "tomcat存在"
return 12
fi
}
install_fun(){
echo "建立tomcat文件夹"
mkdir -p $main_path
cd $main_path
echo "正在下载。请稍等..."
wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
echo "正在解压,请稍等..."
tar -zxvf $install_name
echo "安装完成"
rm $main_path/apache-tomcat-9.0.30.tar.gz
echo "rm tar packet over"
cd apache-tomcat-9.0.30/bin
sh startup.sh
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
}
main(){
echo "***安装tomcat***"
sleep 1
env_fun
re=$?
if [ 10 -eq $re ] ;then
install_fun
else
echo "tomcat已存在,不需要安装"
fi
}
main
exit 0
6.shell脚本常用操作
命令 | 解释 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-lq | 小于 |
-le | 小于等于 |
-ge | 大于等于 |
-z | 空串 |
-n | 非空串 |
-r | 可读为真 |
-w | 可写为真 |
-x | 可执行为真 |
-f | 正规文件为真 |
-d | 存在文件目录为真 |
-c | 文件为字符特殊文件为真 |
-b | 文件为块特殊文件为真 |
-s | 文件大小非0时为真 |
-t | 当文件描述符(默认为1)指定的设备为终端时为真 |
-a | 与 |
-o | 或 |
! | 非 |
str1 = str2 | 当两个串有相同内容、长度时为真 |
str1 != str2 | 当串str1和str2不等时为真 |
-n str1 | 当串的长度大于0时为真 |
-z str1 | 当串的长度为0时为真 |
str1 | 当串str1为非空时为真 |
end!