上周例会的时候,冷不丁的接到了维护原有的安装脚本和编写升级、卸载脚本的任务,PM和几个同事一本正经的说,一天甚至30分钟就可以精通shell脚本编写,哪怕没有语言基础也可以。

当然,作为有着C++、Python语言学习经验的我,还是很清楚,难点不在语言上,难点在于脚本的逻辑完整性。毕竟没有经验,即便遇到不清楚的命令,上网查也可以,关键怕的是无从着手,要想短时间精通还是不太可能的。好在shell语言确实足够简单,因此也未尝不可能。

不过这里要说一句题外话,就是目前公司项目的安装方式实在是简陋,虽说系统是安装在linux系统上的,但客户毕竟不一定都懂linux,他们更想要的是跟windows一样的傻瓜式安装体验,无非是点击安装,Next、Next这样一直到finished。而目前项目最简单的安装方式是,上传安装包到服务器,先unzip,然后执行install1,重启之后执行install2,install3……;而因为缺少升级脚本和卸载脚本,所以往往还需要手动stop_all,并rm -rf安装目录文件,再停止一些服务占用;而更复杂的版本还需要客户手动修改配置文件……  所以我的目标计划如下:针对目前各版本编写卸载脚本-->完善最近几个大版本的安装脚本(主要是修正错误)-->对应升级脚本的编写-->一键式安装卸载脚本的编写


言归正传,我的Bash脚本编写之路是这样的。

第一步,先用了一天半的时间学习完shell脚本编写的系统知识,参考网址http://outofmemory.cn/shell/learn-shell-in-30-minutes/,很详细也很系统。这样基本功就有了。

第二步,用了两天时间,把公司的安装脚本拆解到每个文件夹,每个子脚本和配置文件内容,写了整整十页纸。这就是把理论和实践结合了,好处如下:

一是结合脚本和所学知识,更容易强化记忆;

二是看现成的脚本可以系统理解编写思路;

三是刚好和目标结合,不容易迷茫。

注意:这个过程主要是记载每个脚本的完成内容,方便后续查阅,重点不在命令的用法理解,后续需要用到时再详细学习。

第三步,就是实践阶段了。把整个install过程串起来,发现先后都安装了哪些服务、赋予了哪些环境变量、修改了哪些系统文件、开启了哪些自启动服务、运行了哪些进程、创建了哪些文件和文件夹,然后判断哪些是卸载后应当保留的、哪些是可以询问用户保留与否的、哪些是一定要删除的,最后按照优先顺序(依赖关系),依次进行停止、恢复、卸载、删除操作。至此,卸载脚本完成。脚本中注意随时出现提示,保证互动性;卸载前把重要文件予以备份,以防止卸载后恢复安装。

第四步,就是进阶了。灵活运用,发现之前的错误,用更简洁明了,方便修改升级的方式编写脚本。

<未完待续>

Bash脚本编写初体验的更多相关文章

  1. 一个很不错的bash脚本编写教程

    转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...

  2. bash脚本编写基础

    bash脚本编程     命令的堆砌     脚本程序:解释器解析执行     shell:交互式接口,编程环境         shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...

  3. Shell脚本编程初体验

    原文:http://linoxide.com/linux-shell-script/guide-start-learning-shell-scripting-scratch/ 作者: Petras L ...

  4. linux base脚本编写-自动领取微信红包

    bash脚本编写 语法 变量 定义: your_name = "ABC" 使用: echo $your_name 只读变量 a = "123" readonly ...

  5. vim编写Bash脚本

    vim编写Bash脚本,可以说是类unix系统下的原生应用啊,想到初vi编辑器可是每个unix自带的哦. 缩进:在.vimrc中添加 filetype plugin indent on 未完待续,以后 ...

  6. 在ubuntu linux 中编写一个自己的bash脚本

    在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...

  7. 从此编写 Bash 脚本不再难【转】

    从此编写 Bash 脚本不再难 原创 Linux技术 2017-05-02 14:30 在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个 ...

  8. Linux中编写Bash脚本的10个技巧

    Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式.尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能. 本文中,我们将分享 ...

  9. ipython及Python初体验

    阅读目录: Python环境体验 Python编辑器 ipython安装 Python提示符 Python初体验 print和变量 变量操作 内建函数:方法 数学运算:简单算术.随机数 关于模块 一. ...

随机推荐

  1. 【Owin 学习系列】2. Owin Startup 类解析

    Owin Startup 类解析 每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件.你可以通过不同的方式来连接你的 startup 类和运 ...

  2. 设计模式的征途—16.访问者(Visitor)模式

    在患者就医时,医生会根据病情开具处方单,很多医院都会存在以下这个流程:划价人员拿到处方单之后根据药品名称和数量计算总价,而药房工作人员根据药品名称和数量准备药品,如下图所示. 在软件开发中,有时候也需 ...

  3. python3网络编程之socket

    文章内容: socket介绍 socket参数介绍 流程描述 socket对象内建方法 基本socket实例 通过socket实现简单ssh并实现接收大数据 socket介绍 socket又称&quo ...

  4. docker的简单应用(总结笔记)

    sudo docker pull ubuntu /*下载Ubuntu最新镜像*/sudo docker pull ubuntu:14.04 /*下载Ubuntu14.04版镜像*/sudo docke ...

  5. 小程序server-3-搭建WebSocket 服务

    小程序server-3-搭建WebSocket 服务: 1.安装 Node 模块 使用 ws 模块来在服务器上支持 WebSocket 协议,下面使用 NPM 来安装: cd /var/www/wxp ...

  6. 【viewport】移动设备的兼容性问题

    前段时间用微信开发者工具重构一个菜单项目的时候发现iphoneSE显示不全以及布局错乱的问题,找到了一个简单粗暴的解决方法.     移动设备上的viewport分为layout viewport  ...

  7. 5. Leetcode 448. Find All Numbers Disappeared in an Array

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

  8. VPS安装中文语言

    在CentOS VPS下修改语言编码: localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 export LC_ALL=zh_CN.utf8 上面第一步是用来产生编码文 ...

  9. SpringBoot基础梳理

    1.入口类和@SpringBootApplication注解: SpringBoot通常有一个名为*Application的入口类,入口类里面有main方法,我们可以通过启动main方法启动sprin ...

  10. TASKCTL产品功能清单-转载

    功能分类 功能描述 一级 二级 关系 调度控制 作业依赖关系调度 作业依赖关系调度是调度最基本的功能,指作业间具有顺序的运行,比如:a.b.c三个作业,只有当a完成后才运行b,b完成才能运行c 作业并 ...