本文譯自 iSystemAdmin 的 《List Of Popular Scripting Languages for Linux and Windows》。
具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門“系統管理員”創造的藝術。這門藝術需要了解系統本身的相關知識,系統管理命令的語法,程式設計和演算法知識以及至少一門指令碼程式語言。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的語法和優點。指令碼語言之間幾乎沒有相似之處,但也不會像外星語那樣難以讀懂。指令碼語言既可用來管理系統,也可以用做web開發。基於服務端和基於客戶端的指令碼語言很少。客戶端指令碼語言大多數用來在瀏覽器裡顯示內容以及與使用者進行互動。伺服器端指令碼語言通常用來管理系統或web服務。本文中,我們只會關注那些用作系統管理的指令碼語言。讓我們開始吧!
關於指令碼應該知道的事情:
• 指令碼應該可以作為獨立的命令執行,或者可以在終端命令列介面下使用指令碼語言的二進位制檔案呼叫。
• 如果是可執行指令碼,應該在開頭寫出下面這行特殊的程式碼:
1 |
#!/path/of/the/cli |
例如bash
1 |
#!/bin/bash |
或者perl
1 |
#!/usr/bin/perl |
‘#!’這個符號代表了執行該指令碼需要呼叫的程式。
Bash
在Linux和UNIX世界裡,bash指令碼的數量最多。正如我們在很多文章中提到的那樣,bash也是最受到大家喜愛的。基本上,bash是一個具有解釋功能的命令列shell。它能夠用作程式設計並且滿足大多數的基本程式設計需求。在使用變數之前無需宣告,也不需要知道變數的型別。它的缺點在於,使用bash沒有其他的庫可以利用。你可以使用的只有/bin/bash (或 /bin/sh)。當你宣告一個變數時,你無需在前面使用$符號,但是在使用時你需要在前面加上$表明它是一個“變數”。bash非常容易編寫,Linux、UNIX以及安裝了cywin程式的Windows都帶有bash。如果你身為一名系統管理員但是不會bash指令碼程式設計,你最好馬上開始學習。《10本適合於系統管理員的最佳書籍》這篇文章裡列舉了很多好的參考書。下面是一段簡單的bash指令碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash USER=$1 echo "Adding User $USER in group users..." /usr/sbin/useradd -g users $USER if [ $? == 0 ]; then /usr/bin/passwd $USER else echo "Sorry, User addition failed" fi |
Perl
基本上,perl可以看做UNIX和Windows系統上的(圖靈)完備程式語言。perl的含義是實用報表提取語言(Practical Extraction and Report Language)。Perl是一種通用程式語言,起初開發perl是用於文書處理,現在的使用範圍非常廣泛,包括系統管理、web開發、網路程式設計、甚至GUI開發等許多場合。
它的優點是易於使用且同時支援程式導向和麵向物件程式設計。perl是模組化的,易於呼叫第三方模組。儘管設計的目標是圖靈完備的程式語言,但是自1993年面世開始perl一直被用作編寫系統管理指令碼。perl既支援編譯也可以解釋執行,因此perl比bash指令碼更安全。當錯誤發生時,bash指令碼並不知道;然而,如果在執行之前編譯過程中有任何錯誤發生perl會拒絕啟動執行。一段小的perl指令碼會讓你體會perl語言的風格。#之後的內容是註釋。這段指令碼會建立一個包含1000個隨機數的陣列,每個隨機數包含16個數字:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/perl my @numbers; srand (time); for ($i=0; $i<1000; $i++) { $a=int 10000000000*rand(); $b=int 10000000000*rand(); $c = $a . $b; push @numbers,substr($c,0,16)."\n"; } print @numbers; |
PHP
大家都知道PHP“通常”被用作web網站開發,但是它也可以像perl一樣執行系統管理任務。這就是為什麼很多系統管理員使用PHP完成cron任務和其他指令碼工作。雖然與perl功能相似,但是PHP的目標是生成HTML標準輸出。通常它會被嵌入在web伺服器程式中執行。命令列版本的PHP支援指令碼程式設計。類似上面perl示例,同樣功能的PHP指令碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/usr/bin/php function make_seed() { list($usec, $sec) = explode(' ', microtime()); return (float) $sec + ((float) $usec * 100000); } srand (make_seed()); for ($i=0; $i<1000; $i++) { $a=rand(1000000000,9999999999); $b=rand(1000000000,9999999999); $c = $a . $b; $numbers[]=substr($c,0,16); } for ($i=0; $i<1000;$i++) echo "$numbers[$i]\n"; |
Python
很明顯,我們是在討論指令碼語言而不是亞馬遜叢林裡的某種動物。python是通用高階程式語言,它強調程式碼的可讀性。python的語法非常簡潔且富有表現力。與perl類似,python也有很多的擴充套件庫。儘管python具備函數語言程式設計的能力,但是大多數時候它被看作一門物件導向語言。web開發方面,python被用來開發Apache專案的mod_wsgi模組。如今,大多數Linux和UNIX發行版本都包含了python,作為指令碼語言的一種很多系統工具採用python進行開發。python也支援為GUI環境編寫程式碼。下面是一段簡單的python程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
health = 10 trolls = 0 damage = 3 while health >0: #!= 0: trolls += 1 health = health - damage print " " \ "but takes", damage, "damage points.\n" print " ", trolls, "trolls." |
sed
sed是一個Unix文字解析工具,它提供一種程式語言可用來對文字解析和轉換。sed是流編輯器(Stream Editor)的縮寫,基本上是一個執行飛快的文字編輯器。sed不提供任何互動環境進行檔案編輯。它逐行讀取內容,對讀取的內容執行命令列指定的操作即sed指令碼,然後輸出執行結果。你可以對檔案用sed快速執行文字操作。最近perl被用來處理同樣的工作,但是仍然有一些情形需要由專家級系統管理員使用sed快速解決任務。下面是一個簡單的示例:
1 |
$ sed -e 's/foo/bar/g' myfile.txt |
這個命令會查詢myfile.txt檔案中所有的foo並替換成bar然後把結果輸出到螢幕上。sed的主要命令是 ‘s/foo/bar/g’,該命令在vi或vim在互動式編輯模式下同樣支援。
除了本文介紹的這些之外,還有像Ruby、VBScript、Java Script、JScript、Tcl、AppleScript和Falcon等等很多其他的指令碼語言。本文旨在介紹那些在系統管理中常用的指令碼語言,希望你能夠熟悉它們並提升你的工作效率。
英文原文 iSystemAdmin 編譯:伯樂線上 – 唐尤華
【如需轉載,請標註並保留原文連結、譯文連結和譯者等資訊,謝謝合作!】