shell線上中文手冊abs,shell中文教程,shell中文教程 - 海底蒼鷹(tank)部落格
http://manual.51yip.com/shell/
http://mprc.pku.edu.cn/mentors/training/TrainingCourses/material/ShellProgramming.HTM
SHELL指令碼編程的常識
七種檔案類型
Regex
字元類描述
shell的引號類型
變數設定時的不同模式:
條件測試
命令執行順序
指令碼調試
一些常用的小TRICK
列印一些頭資訊
建立一個長度為0的空檔案
一些常用的shell變數
$0的使用
Shift的運用
用head或tail指令指定查閱的行數
AWK使用規則
第一個 awk
多個欄位
外部指令碼
BEGIN 和 END 塊
規則運算式和塊
條件陳述式
數值變數
字串化變數
眾多運算子
欄位分隔符號
欄位數量
記錄號
多行記錄
OFS 和 ORS
將多行轉換成用 tab 分隔的格式
迴圈結構
for 迴圈
break 和 continue
數組下標字串化
數組工具
格式化輸出
字串函數
一些更耐人尋味的函數
字串替換
特殊字元串形式
SED使用規則
sed 樣本
另一個 sed 樣本
位址範圍
帶規則運算式的地址
有關地址的更多內容
替換
規則運算式混亂
更多字元匹配
進階替換功能
組合使用
一個地址的多個命令
附加、插入和更改行
使用 sed 的幾個樣本
LINUX常用指令碼和函數
LINUX常用命令
關於檔案/目錄處理的指令:
關於 Process 處理的指令:
關於字串處理的指令:
聯機查詢的指令:
網路運用指令:
VI常用技巧
Shell指令碼編程的常識
(這些往往是經常用到,但是各種網路上的材料都語焉不詳的東西,個人認為比較有用) 七種檔案類型
d 目錄 l 符號連結
s 通訊端檔案 b 塊裝置檔案
c 字元裝置檔案 p 具名管道檔案
- 普通檔案 Regex
從一個檔案或命令輸出中抽取或過濾文本時。可使用Regex(RE),Regex是一些特殊或不很特殊的字串模式的集合。
基本的元字元集:
^ 只匹配行首。
$ 只匹配行尾。
* 一個單字元後緊跟*,匹配0個或多個此單字元。
[] 匹配[]內字元,可以是一個單字元,也可以是字元序列。可以使
用-來表示[]內範圍,如[1-5]等價於[1,2,3,4,5]。
\ 屏蔽一個元字元的特殊含義,如\$表示字元$,而不表示匹配行
尾。
. 匹配任意單字元。
pattern\{n\} 匹配pattern出現的次數n
pattern\{n,\}m匹配pattern出現的次數,但表示次數最少為n
pattern\{n,m\} 匹配pattern出現的次數在n與m之間(n,m為0-255)
幾個常見的例子:
顯示可執行檔檔案:ls –l | grep …x...x..x
只顯示檔案夾:ls –l | grep ^d
匹配所有的空行:^$
匹配所有的單詞:[A-Z a-z]*
匹配任一非字母型字元:[^A-Z a-z]
包含八個字元的行:^……..$(8個.) 字元類描述
以下是可用字元類的相當完整的列表:
[:alnum:] 字母數字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或製表鍵
[:cntrl:] 任何控制字元
[:digit:] 數字 [0-9]
[:graph:] 任何可視字元(無空格)
[:lower:] 小寫 [a-z]
[:print:] 非控制字元
[:punct:] 標點字元
[:space:] 空格
[:upper:] 大寫 [A-Z]
[:xdigit:] 十六進位數字 [0-9 a-f A-F]
儘可能使用字元類是很有利的,因為它們可以更好地適應非英語 locale(包括某些必需的重音字元等等). shell的引號類型
shell共有四種參考型別:
“ ” 雙引號
‘ ’ 單引號
` ` 反引號
\ 反斜線
l “ ” 可引用除$、` 、\ 、外的任一字元或字串,“ ”中的變數能夠正常顯示變數值。
l ‘ ’與“ ”類似,不同在於shell會忽略任何的引用值。
例如: GIRL=‘girl’
echo “The ‘$GIRL’ did well”
則列印:The ‘girl’ did well
l ` `用於設定系統命令的輸出到變數,shell會將` `中的內容作為一個系統命令並執行質。
例如:echo `date` 則列印當前的系統時間。
l \ 用來屏蔽特殊含義的字元:& * + ^ $ ` “ | ?
例如:expr 12 \* 12 將輸出144 變數設定時的不同模式:
valiable_name=value 設定實際值到 variable_name中
valiable_name+value 如果設定了variable_name,則重設其值
valiable_name:?value 如果未設定variable_name,則先顯示未定義使用者錯誤資訊
valiable_name?value 如果未設定variable_name,則顯示系統錯誤資訊
valiable_name:=value 如果未設定variable_name,則設定其值
valiable_name-value 同上,但取值並不設定到variable_name 條件測試
test命令用於測試字串、檔案狀態和數字,expr測試和執行數值輸出。
Test格式:test condition 或 [ condition ](需要特別注意的是condition的兩邊都要有一個空格,否則會報錯),test命令返回0表示成功。
l 下面將分別描述test的三種測試:
n 檔案狀態測試(常用的)
-d 測試是否檔案夾
-f 測試是否一般檔案
-L 測試是否連結檔案
-r 測試檔案是否可讀
-w 測試檔案是否可寫
-x 測試檔案是否可執行
-s 測試檔案是否非空
n 字串測試
五種格式: test “string”
test string_operator “string”
test “string” string_operator “string”
[ string_operator “string” ]
[ “string” string_operator “string” ]
其中string_operator可以為: = 兩字串相等
!= 兩字串不等
-z 空串
-n 非空串
n 數值測試
兩種格式: “number” number_operator “number”
[ “number” number_operator “number” ]
其中:number_operator 可以為:-eq 、-ne、-gt、-lt、-ge
例如: NUMBER=130
[ “990” –le “995” –a “NUMBER” -gt “133” ]
(其中-a表示前後結果相“與”)
l expr命令一般用於整數值,但也可以用於字串。
n 格式: expr srgument operator operator argument
例如: expr 10 + 10
expr 10 ^ 2 (10的平方)
expr $value + 10
n 增量計數――expr在迴圈中最基本的用法
例如: LOOP=0
LOOP=`expr $LOOP + 1`
n 模式比對:通過指定的冒號選項計算字串中的字元數
例如: value=account.doc
expr $value : `\(.*\).doc`
輸出 account 命令執行順序
&& 成功執行一個命令後再執行下一個
|| 一個命令執行失敗後再執行另一個命令
( ) 在當前shell中執行一組命令(格式:(命令1;命令2; ……))
{ } 同( )
例如: comet mouth_end || ( echo “hello” | mail dave ;exit )
如果沒有( ),則shell將直接執行最後一個命令(exit) 指令碼調試
最有用的調試指令碼的工具是echo命令,可以隨時列印有關變數或操作的資訊,以協助定位錯誤。也可使用列印最後狀態($?) 命令來判斷命令是否成功,這時要注意的是要在執行完要測試的命令後立即輸出$?,否則$?將會改變。
Set命令也可以用來輔助指令碼測試:
Set –n 讀命令但是不執行
Set –v 顯示讀取的所有的行
Set –x 顯示所有的命令及其參數
(要關閉set選項,只要把-換成+就可以了,這裡有點特殊,要注意一下)
一些常用的小trick 列印一些頭資訊
command << dilimiter
……
……
dilimiter
以分界符號dilimiter中的內容作為命令的標準輸入
常用在echo命令中,這樣就避免了沒輸出一行就要使用一個echo命令,同時,輸出格式的調整也相應變得簡單了。
例如: echo << something_message
************************************************
hello, welcome to use my shell script
************************************************
something_message
將在螢幕上輸出:
************************************************
hello, welcome to use my shell script
************************************************
一、利用<<的分解符號性質還可以自動選擇菜單或實現自動的ftp傳輸
也就是利用分解符號的性質自動選擇菜單。
例如: ./menu_choose >>output_file 2>&1 <<Choose
2
3
Y
Choose
則自動在執行指令碼的過程中一步步作出選擇:2,3,Y
<<這種性質決定了它是理想的訪問資料庫的有用工具,可以用它來輸入面對資料庫提示時所作的各種選擇。 建立一個長度為0的空檔案
執行 > file_name 命令或 touch file_name 命令。 一些常用的shell變數
$# 傳遞到指令碼的參數個數
$* 以一個單字串顯示所有向指令碼傳遞的參數(可大於9個)
$$ 指令碼啟動並執行當前進程的ID號
$! 後台啟動並執行最後一個進程的ID號
$@ 與$#相同,但使用時加引號,並在引號中返回每個參數
$- 顯示shell使用的當前選項
$? 顯示最後命令的退出狀態,0表示無錯誤(這個變數也常常用來列印輸出,在指令碼調試時標記某個shell命令或某個函數是否正確執行,但是要注意,$?記載的是最近的函數或命令的退出狀態,因此列印時應該立即列印以獲得正確的資訊) $0的使用
在變數中有一種位置變數$n,用來存放函數調用或指令碼執行時傳入的參數,其中$0表示函數名或指令碼名,需要注意的是,這時的指令碼名傳遞的是包含全路徑的指令碼名。從$1-$9表示傳入的第一到第九個參數,這樣的參數表示不能多於九個,如果多於九個,可以使用下面將要提到的shift指令來讀取。
因為$0存放函數名或指令碼名,因此我們可以通過echo $0來輸出調用資訊,但是,由於存放的是全路徑名,我們可以利用一個shell命令來得到指令碼名,basename $0 將得到$0中名字的部分,而與之相反的,dirname $0將得到$0中路徑的部分。 Shift的運用 用head或tail指令指定查閱的行數
例如:查閱檔案前20行: head –20 file_name
查閱檔案後10行: tail –10 file_name
awk使用規則
awk 是一種很棒的語言。awk 適合於文本處理和報表產生,它還有許多精心設計的特性,允許進行需要特殊技巧程式設計。與某些語言不同,awk 的文法較為常見。它借鑒了某些語言的一些精華部分,如 C 語言、python 和 bash(雖然在技術上,awk 比 python 和 bash 早建立)。awk 是那種一旦學會了就會成為您戰略編碼庫的主要部分的語言。
第一個 awk
讓我們繼續,開始使用 awk,以瞭解其工作原理。在命令列中輸入以下命令:
$ awk '{ print }' /etc/passwd
您將會見到 /etc/passwd 檔案的內容出現在眼前。現在,解釋 awk 做了些什麼。調用 awk 時,我們指定 /etc/passwd 作為輸入檔案。執行 awk 時,它依次對 /etc/passwd 中的每一行執行 print 命令。所有輸出都發送到 stdout,所得到的結果與與執行catting /etc/passwd完全相同。
現在,解釋 { print } 代碼塊。在 awk 中,花括弧用於將幾塊程式碼群組合到一起,這一點類似於 C 語言。在代碼塊中只有一條 print 命令。在 awk 中,如果只出現 print 命令,那麼將列印當前行的全部內容。
這裡是另一個 awk 樣本,它的作用與上例完全相同: