本文譯自 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指令碼。12
3456
78910
1112
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是模組化的,易於呼叫第三方模組。儘管設計的目標是圖靈完備的程式語言,但是自2023年面世開始perl一直被用作編寫系統管理指令碼。perl既支援編譯也可以解釋執行,因此perl比bash指令碼更安全。當錯誤發生時,bash指令碼並不知道;然而,如果在執行之前編譯過程中有任何錯誤發生perl會拒絕啟動執行。一段小的perl指令碼會讓你體會perl語言的風格。#之後的內容是注釋。這段指令碼會建立乙個包含1000個隨機數的陣列,每個隨機數包含16個數字:12
3456
78910
1112
1314
#!/usr/bin/perl
my
@numbers
;
srand
(
time
);
for
(
$i
=0;
$i
<1000;
$i
++)
print
@numbers
;
php
大家都知道php「通常」被用作web**開發,但是它也可以像perl一樣執行系統管理任務。這就是為什麼很多系統管理員使用php完成cron任務和其他指令碼工作。雖然與perl功能相似,但是php的目標是生成html標準輸出。通常它會被嵌入在web伺服器程式中執行。命令列版本的php支援指令碼程式設計。類似上面perl示例,同樣功能的php指令碼如下:12
3456
78910
1112
1314
1516
1718
1920
2122
23#!/usr/bin/php
function
make_seed()
srand (make_seed());
for
(
$i
=0;
$i
<1000;
$i
++)
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**:12
3456
78910
1112
1314
15health
=
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在互動式編輯模式下同樣支援。
Windows和Linux指令碼實現for迴圈批量
應用場景舉例,git上面的專案很多,有幾十個,不想乙個乙個去拉取,建立gitclone.bat指令碼檔案,內容如下 echo off echo start git clone pause for f i in list.txt do git clone i echo git clone finish...
Linux和Windows指令碼中的延時操作
sleep 2 系統會延時2秒才執行下面的命令。但是windows中卻沒有對應的命令。如何做到延時呢?自己寫乙個簡單的延時程式當然可以辦到,同時有另外乙個更簡單的辦法。比如要掩飾10秒,可以輸入 ping 127.0.0.1 n 10 null 127.0.0.1是本機位址,只要不做特殊設定是可以p...
流行Linux和Windows指令碼語言列表
具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門 系統管理員 創造的藝術。這門藝術需要了解系統本身的相關知識,系統管理命令的語法,程式設計和演算法知識以及至少一門指令碼程式語言。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的語法和優點。指令碼語言之間幾乎沒...