天天看點

跟老男孩學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軟體)等。我們在開發一個應用時應根據業務需求,結合不同語言的優勢及自身擅長的語言來選擇,揚長避短,進而達到高效開發及易于自身維護等目的。