Bash脚本编写初体验
上周例会的时候,冷不丁的接到了维护原有的安装脚本和编写升级、卸载脚本的任务,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脚本编写初体验的更多相关文章
- 一个很不错的bash脚本编写教程
转自 http://blog.chinaunix.net/uid-20328094-id-95121.html 一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂! 建立一个脚本 Lin ...
- bash脚本编写基础
bash脚本编程 命令的堆砌 脚本程序:解释器解析执行 shell:交互式接口,编程环境 shell:能够提供一些内部命令,并且能通过PATH环境变量找到外部命 ...
- Shell脚本编程初体验
原文:http://linoxide.com/linux-shell-script/guide-start-learning-shell-scripting-scratch/ 作者: Petras L ...
- linux base脚本编写-自动领取微信红包
bash脚本编写 语法 变量 定义: your_name = "ABC" 使用: echo $your_name 只读变量 a = "123" readonly ...
- vim编写Bash脚本
vim编写Bash脚本,可以说是类unix系统下的原生应用啊,想到初vi编辑器可是每个unix自带的哦. 缩进:在.vimrc中添加 filetype plugin indent on 未完待续,以后 ...
- 在ubuntu linux 中编写一个自己的bash脚本
在ubuntu linux 中编写一个自己的简单的bash脚本. 实现功能:终端中输入简单的命令(以pm为例(play music)),来实现音乐的播放.注:本人ununut中安装了audacious ...
- 从此编写 Bash 脚本不再难【转】
从此编写 Bash 脚本不再难 原创 Linux技术 2017-05-02 14:30 在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个 ...
- Linux中编写Bash脚本的10个技巧
Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式.尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能. 本文中,我们将分享 ...
- ipython及Python初体验
阅读目录: Python环境体验 Python编辑器 ipython安装 Python提示符 Python初体验 print和变量 变量操作 内建函数:方法 数学运算:简单算术.随机数 关于模块 一. ...
随机推荐
- 【SignalR学习系列】7. SignalR Hubs Api 详解(JavaScript 客户端)
SignalR 的 generated proxy 服务端 public class ContosoChatHub : Hub { public void NewContosoChatMessage( ...
- Java 字符串截取问题
编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4 public class StringSplit ...
- Python爬虫初学(一)—— 爬取段子
最近开始学Python的爬虫,是在这个博客跟着学习的,该博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不过没关系,自己改改就好了. 我们想针对网站的内容进行筛选,只获取 ...
- 一步一步学Vue(十二)
为了提升代码的逼格,之后代码改为Vue文件组件,之前代码虽然读起来容易理解,而且适合在小的项目中使用,但是有如下缺点: 全局定义(Global definitions) 强制要求每个 componen ...
- Tornado 判断用户登录状态和操作权限(装饰器)
判断是否登录: def authenticated(method): '''''' @functools.wraps(method) def wrapper(self, *args, **kwargs ...
- 为Tornado框架加上基于Redis或Memcached的session 【第三方】
Tornado 没有session,只有cookie_secret,这在一些情况下是不利于开发的.所有我们可以给Tornado加上session的功能. 这篇文章讲解的是依靠第三方包来实现.以后的文章 ...
- 含有n个元素的整型数组,将这个n个元素重新组合,求出最小的数,如{321,3,32},最小的数为321323
public class GetMinNumber { public static void main(String[] args) { String[] arr = null; System.out ...
- .net操作IIS,新建网站,新建应用程序池,设置应用程序池版本,设置网站和应用程序池的关联
ServerManager类用来操作IIS,提供了很多操作IIS的API.使用ServerManager必须引用Microsoft.Web.Administration.dll,具体路径为:%wind ...
- 基于.NET CORE微服务框架 -Api网关服务管理
1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surging新的版本 更新内容: 1. 扩展Zookeeper封装2 ...
- angularJS实战(一)
angular实现列表 accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServ ...