我是靠谱客的博主 无情夏天,最近开发中收集的这篇文章主要介绍shell 编程流程shell 编程格式shell 编程思路,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

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.repo
 yum 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> ];then
    systemctl <span style="color:#3300aa">stop</span> mysqld mariadb &>/dev/null
    yum 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/data
    userdel <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-community
    yum-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 编程流程shell 编程格式shell 编程思路的全部内容,希望文章能够帮你解决shell 编程流程shell 编程格式shell 编程思路所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部