**
唐尤華windows
linux
程式語言
python
unix
指令碼語言
摘要:具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門系統管理員創造的藝術。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的語法和優點。指令碼語言之間幾乎沒有相似之處,但也不會像外星語那樣難以讀懂。指令碼語言既可用來管理系統,也可以用做web開發。
具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門「系統管理員」創造的藝術。這門藝術需要了解系統本身的相關知識,系統管理命令的語法,程式設計和演算法知識以及至少一門指令碼程式語言。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的語法和優點。指令碼語言之間幾乎沒有相似之處,但也不會像外星語那樣難以讀懂。指令碼語言既可用來管理系統,也可以用做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以及安裝了cywin程式的windows都帶有bash。如果你身為一名系統管理員但是不會bash指令碼程式設計,你最好馬上開始學習。這篇文章裡列舉了很多好的參考書。下面是一段簡單的bash指令碼。
#!/bin/bashperluser
=$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可以看做unix和windows系統上的(圖靈)完備程式語言。perl的含義是實用報表提取語言(practical extraction and report language)。perl是一種通用程式語言,起初開發perl是用於文書處理,現在的使用範圍非常廣泛,包括系統管理、web開發、網路程式設計、甚至gui開發等許多場合。
它的優點是易於使用且同時支援面向過程和物件導向程式設計。perl是模組化的,易於呼叫第三方模組。儘管設計的目標是圖靈完備的程式語言,但是自2023年面世開始perl一直被用作編寫系統管理指令碼。perl既支援編譯也可以解釋執行,因此perl比bash指令碼更安全。當錯誤發生時,bash指令碼並不知道;然而,如果在執行之前編譯過程中有任何錯誤發生perl會拒絕啟動執行。一段小的perl指令碼會讓你體會perl語言的風格。#之後的內容是注釋。這段指令碼會建立乙個包含1000個隨機數的陣列,每個隨機數包含16個數字:
#!/usr/bin/perlphpmy @numbers;
srand (time);
for ($i=
0; $i
<
1000
; $i++)
print @numbers;
大家都知道php「通常」被用作web**開發,但是它也可以像perl一樣執行系統管理任務。這就是為什麼很多系統管理員使用php完成cron任務和其他指令碼工作。雖然與perl功能相似,但是php的目標是生成html標準輸出。通常它會被嵌入在web伺服器程式中執行。命令列版本的php支援指令碼程式設計。類似上面perl示例,同樣功能的php指令碼如下:
#!/usr/bin/phppythonfunction make_seed()
srand (make_seed());
for ($i=
0; $i
<
1000
; $i++)
for ($i=
0; $i
<
1000
;$i++)
echo "$numbers[$i]\n";
很明顯,我們是在討論指令碼語言而不是亞馬遜叢林裡的某種動物。python是通用高階程式語言,它強調**的可讀性。python的語法非常簡潔且富有表現力。與perl類似,python也有很多的擴充套件庫。儘管python具備函式式程式設計的能力,但是大多數時候它被看作一門物件導向語言。web開發方面,python被用來開發apache專案的mod_wsgi模組。如今,大多數linux和unix發行版本都包含了python,作為指令碼語言的一種很多系統工具採用python進行開發。python也支援為gui環境編寫**。下面是一段簡單的python**:
healthsed= 10
trolls= 0
damage= 3
while health
>
0: #!= 0:
trolls += 1
health
health
= health - damage
print " " \
"but takes", damage, "damage points.\n"
print " ", trolls, "trolls."
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在互動式編輯模式下同樣支援。
英文原文:isystemadmin
流行Linux和Windows指令碼語言列表
具備指令碼知識的系統管理員與其他系統管理員有著明顯的區別。指令碼是一門 系統管理員 創造的藝術。這門藝術需要了解系統本身的相關知識,系統管理命令的語法,程式設計和演算法知識以及至少一門指令碼程式語言。對系統管理員來說編寫指令碼有很多選擇,每種指令碼語言都有著自己獨特的語法和優點。指令碼語言之間幾乎沒...
Windows和Linux下socket的區別
1.標頭檔案 windows下winsock.h或winsock2.h linux下netinet in.h 大部分都在這兒 unistd.h close函式在這兒 sys socket.h 在in.h裡已經包含了,可以省了 2.初始化 windows下需要用wsastartup啟動ws2 32.l...
windows和linux下socket程式設計的不同
windows windows 標頭檔案的區別 include include windows 初始化的區別 windows 宣告socket socket型別 windows socket關閉 closesocket windows socket操作錯誤返回值 socket error windo...