shell 编程流程

目录

1、开始编辑脚本

2、检查脚本

3、安装脚本

shell 编程格式

shell 编程思路


1、开始编辑脚本

当我们得到了一个需求的时候,我们应该编辑一些信息内容,方便进行一些简单配置和描述信息。

井号为注释,指的是cpu不会执行的部分,该部分主要是用于开发者浏览,以便快速了解功能

#!/usr/bin/bash  # 指定解释器# editor newrain  # 说明编辑者信息,以便沟通代码内容
# date 2021-07-20
# this script for deploy mysql database # 说明脚本功能

2、检查脚本

当脚本的头定义好了之后,我们开始按照脚本的功能进行一系列的检查操作,可以确保我们的脚本功能执行正常,这在实际的工作过程中是尤为重要的,举个例子,比如我们要使用yum工具安装一个mysql,那么首先我们得保证以下条件:

 1、执行脚本的用户必须是ROOT用户或可以执行sudo权限的用户  
 2、当前服务器的网络环境必须是正常的  
 3、当前的yum源是可用的  
 4、这台服务器再此之前从未安装过mysql数据库
 
 好的,按照以上的要求,我们开始编辑代码的检查部分
 
 # 执行脚本的用户必须是ROOT用户或可以执行sudo权限的用户
 if [ $UID -ne 0 ];then
    echo "请使用root用户执行脚本"
 else
    echo "当前用户为管理员用户root"
 fi
 # if 解释
 # 这里我们用到了一个if 语句,if语句是shell这门语言中的流控制,if为如果,[] 中的内容为条件,then解释为然后,else解释为否则,这条语句我们可以理解为:
  if [ $UID -ne 0 ];then
  # 如果 [ UID变量的值 不等于 0 ];然后
    echo "请使用root用户执行脚本"
    # 打印 "请使用root用户执行脚本"
    exit 1
    # 因为用户是错误的,所以退出程序
 else
 # 否则
    echo "当前用户为管理员用户root"
    # 打印 "当前用户为管理员用户root"
 fi # fi为if语句的结束符号
 
 # 当前服务器的网络环境必须是正常的 
 ping -w1 -c1 www.baidu.com # 对 baidu 发起一次ping指令,如果成功则结束
 if [ $? -ne 0 ];then
    echo "网络异常"
 else
    echo "网络正常"
 fi
 
 # 当前的yum源是可用的
 # 这里我们只要保证所有的源可用即可,那么我们将原服务器的yum源进行备份,然后创建自己的源,比较保险
 mkdir /etc/yum.repos.d/oldrepo
 mv /etc/yum.repos.d/*.repo oldrepo
 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
 yum install -y epel-release yum-utils
 echo "yum源配置成功"
 
 # 这台服务器再此之前从未安装过mysql数据库
 # 我们没有很好的办法判断是否在之前通过yum安装mysql的数据库,所以这里我们通过一些具有特点的文件来判断
​
[[ -f /etc/my.cnf ]] || [[ -d /var/lib/mysql ]] || [[ -f /usr/bin/mysql ]] && \
echo  "经检查发现,当前系统曾安装过mysql数据库,是否进行备份后卸载操作[Y|N]"
# 这里我们指定了一个变量modify,并将默认值设置为N,目的是为了保护用户的原有数据
read modify
modify=${modify:="N"}
if [ $modify = 'Y' ];then
    systemctl stop mysqld mariadb &>/dev/null
    yum remove `rpm -qa |grep mysql`
    yum remove `rpm -qa |grep maraidb`
    # 在这里做了多重保障,虽然得到了同意,但并未将原有数据删除。
    mkdir -p /db-save/{conf,log,data}
    mv /etc/my.cnf /db-save/conf
    mv /var/log/mysql* /db-save/log
    mv /var/log/mariadb* /db-save/log
    mv /var/lib/mysql/* /db-save/data
    userdel -r -f mysql
    echo "我们为您将数据备份到了/db-save目录下"
else
    echo "为了您的数据安全,我们并未进行任何操作"
    exit 0
fi
​
​

3、安装脚本

在上面我们对环境进行了检测,并且做出了一些相应的处理,现在我们就可以保证安装的环境问题了。

# 安装相应的mysql yum 源
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
green "请输入安装的版本[80|57|56|55](default:57):"
read level
green "请输入初始密码:"
read -s passwd
level=${level:=57}
case $level in
80)
    yum -y install mysql-community-server
    ;;
*)
    yum-config-manager --disable mysql80-community
    yum-config-manager --enable mysql${level}-community
    yum -y install mysql-community-server
    ;;
esac
​
systemctl enable mysqld && systemctl start mysqld  && green "mysql安装完成并且成功启动" || red "mysql 安装失败请检查"
yellow "mysql 5.6及以下版本没有初始密码"
[[ -f /var/log/mysqld.log ]] && mysql_passwd=$(grep password /var/log/mysqld.log| awk '{print $NF}') || red "数据库日志异常,请手动更新初始密码"
[[ ! -z mysql_passwd ]] && mysqladmin -p"$mysql_passwd" password "$passwd" && green "密码修改成功:原密码:$mysql_passwd 新密码: $passwd" || red "密码修改出错,请手动修改"

shell 编程格式

1、变量命名
# 遵循见名知意的原则,比如定义一个用户姓名的变量  username='小明',那么我们看到变量名称就可以想到内容
# 缩进格式,建议为4个空格,经验表明,4个空格的层级关系会更加明确,代码条例清晰,不过,在shell中,这并不是硬性的要求
if [ $? -eq 0 ] # [] 内的表达式两端必须和[]保留至少一个空格的空间
then
    echo "成功" # 这条代码是if 的子级,所以他被缩进了一个tab位置
elif [$ -eq 1]  # 这条代码和if是同级的,所以他和if保持垂直。
then
    echo "办成功"
else
    echo "失败"
fi
# 我们将脚本大致分为:# 头信息,指定解释器,说明功能和开发者信息
# 常用的变量定义,比如版本号,用户名,密码,ip等信息,可以很明显的让使用者读取到,同时也便于修改
# 环境监测及处理,为后面我们正式的功能代码提供一个良好的环境,保证程序的可行性
# 功能,实际脚本所需要完成的事情在这一部分定义,所以这里的步骤一般就是将我们之前的部署过程简单修改后进行了开发
# 如果需要,我们会进行安装之后的后续工作,进行服务的监测或初始化等操作。

shell 编程思路

编程最重要的部分就是思路,最难讲的也是思路,思路就是让你掉落在一个一线天的悬崖之下时,前面有一只狼,后面由一只虎,左右两边都是石壁,这时候你有两种选择:1、闭上眼睛,面带微笑,安心等屎 2、想尽一切的办法,使自己获救。不论选择了哪个方法,都会有一个等待你的结局。所以,当你迫切的想要做好一件事情时,安下心,安静下来,好好想想怎样才能做得到。这就是思路。

你可能感兴趣的:(数据库,java,mysql)