目录

1、开始编辑脚本

2、检查脚本

3、安装脚本

shell 编程格式

shell 编程思路


1、开始编辑脚本

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

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

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">#!/usr/bin/bash  # 指定解释器</span>
​
<span style="color:#aa5500"># editor newrain  # 说明编辑者信息,以便沟通代码内容</span>
<span style="color:#aa5500"># date 2021-07-20</span>
<span style="color:#aa5500"># this script for deploy mysql database # 说明脚本功能</span>
​</span></span>

2、检查脚本

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

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

3、安装脚本

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

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

shell 编程格式

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

shell 编程思路

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

shell 编程流程相关推荐

  1. shell编程--流程控制for,do-while,if-then,break,continue,case等

    2.5 流程控制 2.5.1 if语法 1.语法格式 if condition  then      statements  [elif condition      then statements. ...

  2. Linux高级专题详解--shell编程大全(shell变量,if语句,case语句,for循环,while循环,函数调用,数组,正则表达式,shell脚本三剑客--grep,sed,awk家族)

    shell编程 初始shell 程序 语言 编程 ---------------------------------- 语言 自然语言:汉语.英语 计算机语言:c语言.c++.(java php py ...

  3. shell 编程之流程控制语句详解

    前言 可以说,在任何一门编程语言中都离不开流程控制语句,使用流程控制语句可以帮助程序处理各类复杂的操作,常用的流程控制语句,比如: if-else,while,for循环等,在linux 的shell ...

  4. Linux【实操篇】—— Shell 编程入门、变量、运算符、条件判断、流程控制

    目录 一.Shell 编程入门 1. 认识 Shell 2. Shell 脚本的创建与执行 二.Shell 变量 1. 系统变量和自定义变量 2. 变量的基本规则 3. 设置环境变量 4. 位置参数变 ...

  5. Linux学习(十四)---大数据定制篇Shell编程

    文章目录 一.为什么要学习shell编程 二.Shell 是什么 三.shell 编程快速入门-Shell 脚本的执行方式 3.1 脚本格式要求 3.2 编写第一个 Shell 脚本 3.3 脚本的常 ...

  6. Linux Shell常用技巧(十二) Shell编程

    二十三. Bash Shell编程:  1.  读取用户变量:     read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如 ...

  7. Linux Shell编程入门

    从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...

  8. shell编程中for/while/util/case/select/break/continue

    2019独角兽企业重金招聘Python工程师标准>>> Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.w ...

  9. Bourne Shell及shell编程

    Bourne Shell及shell编程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

最新文章

  1. 复杂系统设计 企业开发的困境
  2. java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
  3. 《系统集成项目管理工程师》必背100个知识点-02项目组织方式和特点
  4. [飞秋]局域网聊天写的代码旁人从来看不
  5. CentOS6.6上编译安装httpd2.4
  6. c语言直流电机控制实验报告,直流电机实验报告.docx
  7. OpenCV精进之路(二):图像处理——线性滤波和非线性滤波
  8. 面试题1:赋值运算符函数
  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven
  10. 你与30W奖金只差一个 Apache Flink 极客挑战赛的报名
  11. 计算机word表格计算教程F9,word表格计算方法详解
  12. 向量与矩阵的简单运算
  13. ESModule中载入commjs
  14. python项目作业_期末作业.py · 光辉/python练手小项目 - Gitee.com
  15. go 极简后台管理-二次开发
  16. 那些免费低价云主机真的可以永久使用吗?别再被套路了 盐谷君 上海盐谷 今天
  17. 梅尔加尼服务器状态,梅尔加尼服务器第二界闪光平原暴力竞走大赛
  18. 傍上阿里系大款,禧云国际如何守住“自由身”?
  19. 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
  20. stm32f103rbt6开发板学习

热门文章

  1. 【嵌入式基础小知识】详解单片机中的程序和变量是如何分布的以及一些注意事项
  2. 小米 红米 解账户锁 线刷包 教程 MIUI12 MIUI13
  3. 线索二叉树-C语言实现
  4. c语言getline函数什么意思,getline函数(精华版)详解
  5. 数据结构排序算法(一):排序方法分类和各种排序方法的实现
  6. 辞职后五险一金怎么处理
  7. 计算机专硕多少分能调剂,要疯!今年这些专业考研分数会飙升?初试要考多少分才有戏?...
  8. 换新电脑时如何迁移收藏的网址
  9. hive建表的标准格式及其建表属性详解1
  10. sql 虚拟字段关联查询