天天看点

跟老男孩学Linux运维:Shell编程实战2.4 脚本语言的种类

<b>2.4 脚本语言的种类</b>

<b></b>

2.4.1 shell脚本语言的种类

shell脚本语言是弱类型语言(无须定义变量的类型即可使用),在unix/linux中主要有两大类shell:一类是bourne shell,另一类是c shell。

1.?bourne shell

bourne shell又包括bourne shell(sh)、korn shell(ksh)、bourne again shell(bash)三种类型。

bourne shell(sh)由at&amp;t的steve bourne开发,是标准的unix shell,很多unix系统都配有sh。

korn shell(ksh)由david korn开发,是bourne shell(sh)的超集合,并且添加了csh引入的新功能,是目前很多unix系统标准配置的shell,这些系统上的/bin/sh往往是指向/bin/ksh的符号链接。

bourne again shell(bash)由gnu项目组开发,主要目标是与posix标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种linux发行版默认配置的shell,linux系统上的/bin/sh往往是指向/bin/bash的符号链接。尽管如此,bash和sh还是有很多的不同之处:一方面,bash扩展了一些命令和参数;另一方面,bash并不完全和sh兼容,它们有些行为并不一致,但在大多数企业运维的情况下区别不大,特殊场景可以使用bash替代sh。

2.?c shell

c shell又包括csh、tcsh两种类型。

csh由berkeley大学开发,随bsd unix发布,它的流程控制语句很像c语言,支持很多bourne shell所不支持的功能,例如:作业控制、别名、系统算术、命令历史、命令行编辑等。

tcsh是csh的增强版,加入了命令补全等功能,在freebsd、mac os x等系统上替代了csh。

以上介绍的这些shell中,较为通用的是标准的bourne shell(sh)和c shell(csh)。其中bourne shell(sh)已经被bourne again shell(bash)所取代。

可通过以下命令查看centos 6系统的shell支持情况。

[root@oldboy ~]# cat /etc/shells

/bin/sh        #&lt;==这是linux里常用的shell,指向/bin/bash。

/bin/bash      #&lt;==这是linux里常用的shell,也是默认使用的shell。

/sbin/nologin  #&lt;==这是linux里常用的shell,用于禁止用户登录。

/bin/dash

/bin/tcsh

/bin/csh

linux系统中的主流shell是bash,bash是由bourne shell(sh)发展而来的,同时bash还包含了csh和ksh的特色,但大多数脚本都可以不加修改地在sh上运行,如果使用了sh后发现结果和预期有差异,那么可以尝试用bash替代sh。

2.4.2 其他常用的脚本语言种类

1.?php语言

php是网页程序语言,也是脚本语言。它是一款更专注于web页面开发(前端展示)的语言,例如:wordpress、dedecms、discuz等著名的开源产品都是用php语言开发的。用php程序语言也可以处理系统日志、配置文件等,还可以调用linux系统命令,但是,很少有人这么用。

2.?perl语言

perl脚本语言比shell脚本语言强大很多,在2010年以前很流行,它的语法灵活、复杂,在实现不同的功能时可以用多种不同的方式,缺点是不易读,团队协作困难,但它仍不失为一种很好的脚本语言,存世的大量相关程序软件(比如,xtrabackup热备工具、mysql mha集群高可用软件等)中都有perl语言的身影。当下的linux运维人员几乎不需要了解perl语言了,最多可了解一下perl语言的安装环境。当然了想要二次开发用perl编写软件人员例外,perl语言已经成为历史了。

3.?python语言

python是近几年非常流行的语言,它不但可以用于脚本程序开发,也可以实现web页面程序开发(例如:cmdb管理系统),甚至还可以实现软件的开发(例如:大名鼎鼎的openstack、saltstack都是python语言开发的)、游戏开发、大数据开发、移动端开发。

现在越来越多的公司都要求运维人员会python自动化开发。老男孩it教育持续引领着国内linux培训界的风向标,早在2012年以前就已经开设了python自动化运维开发实战课程(课程表见http://oldboy.blog.51cto.com/2561410/1123127),并于2015年开设了python全栈开发工程师课程,课程表见http://oldboy.blog.51cto.com/2561410/1749122。python语言目前是全球第四大开发语言,未来的发展前景很好,每一个运维人员在掌握了shell编程之后,都应该深入学习python语言,以提升职场竞争力。

2.4.3 shell脚本语言的优势

shell脚本语言的优势在于处理偏操作系统底层的业务,例如:linux系统内部的很多应用(有的是应用的一部分)都是使用shell脚本语言开发的,因为有1000多个linux系统命令为它做支撑,特别是linux正则表达式及三剑客grep、awk、sed等命令。

对于一些常见的系统脚本,使用shell开发会更简单、更快速,例如:让软件一键自动化安装、优化,监控报警脚本,软件启动脚本,日志分析脚本等,虽然php/python语言也能够做到这些,但是,考虑到掌握难度、开发效率、开发习惯等因素,它们可能就不如shell脚本语言流行及有优势了。对于一些常规的业务应用,使用shell更符合linux运维简单、易用、高效的三大基本原则。

php语言的优势在于小型网站系统的开发;python语言的优势在于开发较复杂的运维工具软件、web界面的管理工具和web业务的开发(例如:cmdb自动化运维平台、跳板机、批量管理软件saltstack、云计算openstack软件)等。我们在开发一个应用时应根据业务需求,结合不同语言的优势及自身擅长的语言来选择,扬长避短,从而达到高效开发及易于自身维护等目的。