具備腳本知識的系統管理員與其他系統管理員有著明顯的區別。
腳本是一門「系統管理員」創造的藝術。這門藝術需要了解系統本身的相關知識,系統管理命令的語法,編程和演算法知識以及至少一門腳本編程語言。對系統管理員來說編寫腳本有很多選擇,每種腳本語言都有著自己獨特的語法和優點。腳本語言之間幾乎沒有相似之處,但也不會像外星語那樣難以讀懂。腳本語言既可用來管理系統,也可以用做web開發。有基於服務端,也有基於客戶端的腳本語言。客戶端腳本語言大多數用來在瀏覽器里顯示內容以及與用戶進行交互。伺服器端腳本語言通常用來管理系統或web服務。
本文中,我們只會關注那些用作系統管理的腳本語言。讓我們開始吧!
關於腳本應該知道的事情:
• 腳本應該可以作為獨立的命令執行,或者可以在終端命令行介面下使用腳本語言的二進位文件調用。
• 如果是可執行腳本,應該在開頭寫出下面這行特殊的代碼:
#!/path/of/the/cli
例如bash
#!/bin/bash
或者perl
#!/usr/bin/perl
『#!』這個符號代表了執行該腳本需要調用的程序。
Bash
在Linux和UNIX世界里,bash腳本的數量最多。正如我們在很多文章中提到的那樣,bash也是最受到大家喜愛的。
基本上,bash是一個具有解釋功能的命令行shell。它能夠用作編程並且滿足大多數的基本編程需求。在使用變數之前無需聲明,也不需要知道變數的類型。它的缺點在於,使用bash沒有其他的庫可以利用。你可以使用的只有/bin/bash (或 /bin/sh)。當你聲明一個變數時,你無需在前面使用$符號,但是在使用時你需要在前面加上$表明它是一個「變數」。
bash非常容易編寫,Linux、UNIX以及安裝了cgywin程序的Windows都帶有bash。如果你身為一名系統管理員但是不會bash腳本編程,你最好馬上開始學習。《10本適合於系統管理員的最佳書籍》這篇文章里列舉了很多好的參考書。下面是一段簡單的bash腳本。
#!/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個數字:
#!/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腳本如下:
#!/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代碼:
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快速解決任務。下面是一個簡單的示例:
$
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上流行的腳本語言已經有847次圍觀