標籤:
本文譯自 iSystemAdmin 的 《List Of Popular Scripting Languages for Linux and Windows》。
具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門“系統管理員”創造的藝術。這門藝術需要瞭解系統本身的相關知識,系統管理命令的文法,編程和演算法知識以及至少一門指令碼程式設計語言。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的文法和優點。指令碼語言之間幾乎沒有相似之處,但也不會像外星語那樣難以讀懂。指令碼語言既可用來管理系統,也可以用做web開發。基於服務端和基於用戶端的指令碼語言很少。用戶端指令碼語言大多數用來在瀏覽器裡顯示內容以及與使用者進行互動。伺服器端指令碼語言通常用來管理系統或web服務。本文中,我們只會關注那些用作系統管理的指令碼語言。讓我們開始吧!
關於指令碼應該知道的事情:
• 指令碼應該可以作為獨立的命令執行,或者可以在終端命令列介面下使用指令碼語言的二進位檔案調用。
• 如果是可執行指令碼,應該在開頭寫出下面這行特殊的代碼:
例如bash
或者perl
‘#!’這個符號代表了執行該指令碼需要調用的程式。
Bash
在Linux和UNIX世界裡,bash指令碼的數量最多。正如我們在很多文章中提到的那樣,bash也是最受到大家喜愛的。基本上,bash是一個具有解釋功能的命令列shell。它能夠用作編程並且滿足大多數的基本編程需求。在使用變數之前無需聲明,也不需要知道變數的類型。它的缺點在於,使用bash沒有其他的庫可以利用。你可以使用的只有/bin/bash (或 /bin/sh)。當你聲明一個變數時,你無需在前面使用$符號,但是在使用時你需要在前面加上$表明它是一個“變數”。bash非常容易編寫,Linux、UNIX以及安裝了cywin程式的Windows都帶有bash。如果你身為一名系統管理員但是不會bash指令碼編程,你最好馬上開始學習。《10本適合於系統管理員的最佳書籍》這篇文章裡列舉了很多好的參考書。下面是一段簡單的bash指令碼。
| 12345678910111213 |
#!/bin/bash USER=$1 echo "Adding User $USER in group users..." /usr/sbin/useradd -g users $USER if [ $? == 0 ]; then /usr/bin/passwd $USERelse 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個數字:
| 1234567891011121314 |
#!/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指令碼如下:
| 1234567891011121314151617181920212223 |
#!/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代碼:
| 123456789101112131415 |
health = 10trolls = 0damage = 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 編譯:伯樂線上 – 唐尤華
Linux和Windows指令碼語言