初識shell
shell是操作系統提供的命令接口,其實就是一個命令解釋器。
Unix的多種shell
v Bourne shell
Bournshell(sh)是標準的UNIX shell ,用來管理系統。大多數系統管理腳本,如rc啓動和停止腳本,關機腳本,都是Bourneshell腳本,這是管理員常用的Shell功能。Bourne shell是AT&T公司的產品,聞名於它的簡潔,緊湊,快速。Bourne Shell默認的提示符是美元符號($)。
v C shell
C Shell(csh)是伯克利分校開發的,它增加了一些功能,如命令行歷史,別名,內建算術和作業控制。C Shell延續了Bourne Shell的用戶交互方式,但管理員更喜歡Bourne Shell腳本方式,因爲Bourneshell的腳本簡單,速度快於相同腳本在C Shell中的運行速度。默認的C shell提示符是百分號(%)。
v Korn shell
Korn Shell是AT&T公司的David Korn編寫的,是Bourne Shell的一個擴展版。默認的Korn shell提示符是美元符號($)。
v Bourne againshell (bash)
bash是Unix Bourn shell的GNU版本 ,是Linux系統默認的shell 。bash默認的提示符是美元符號($)。
v TC shell
TC Shell(tcsh)它是UNIX C Shell的一個分支,但添加了許多功能。
v Z shell
Z Shell是另外一個Linux Shell,它結合了bash,TC Shell和Korn Shell的一些功能。
通配符
bash下使用的通配符:
?代表任何單一字符
* 代表任何字符串,可以是空串
[字符組合] 在中括號中的字符皆符合,例[a-z],[ace]
[!字符組合] 不在中括號中的字符皆符合,例[!0-9]
shell的基本功能
v 命令的解釋執行
v 環境變量的設置
v 輸入/輸出重定向
v shell程序設計
UNIX下 流的概念
Linux自動爲每條執行的命令(進程)打開三個文件,分別用於讀取輸入數據、發送輸出數據和錯誤信息,這三個文件分別叫標準輸入(stdin)、標準輸出(stdout)和標準錯誤文件(stderr)
信息流的標準定義:
v 標準輸入流(stdin): 文件描述符0, 默認爲鍵盤.
v 標準輸出流(stdout): 文件描述符1, 默認爲顯示器.
v 標準錯誤流(stderr): 文件描述符2, 默認爲顯示器
輸入/輸出重定向
輸入輸出重定向就是對系統信息流標準定義的修改
※ 輸入重定向 <
例: prog < infile
※ 輸出重定向 > ,>>
例: pwd > outfile ; ls –l >> file1 ;$ prog < infile > outfile
※ 錯誤流重定向 >&
例: gcc hello.c >& log
管道線(pipeline)的概念
在命令中利用管道線(|)將命令隔開,實現將一個程序或命令的輸出作爲另一個程序或命令的輸入
下列字符可作命令表的分隔符
&&:若前一命令執行成功,則執行後一命令,例: mail zhang < letter && rm letter
||:若前一命令執行失敗,則執行後一命令,例: write zhang < letter || mail zhang <letter
環境變量的設置
環境變量是系統預定義的一些變量,如PATH,LOGNAME等變量,例如:
查閱命令:env
相關文件: /etc/profile; ~/.bash_profile ; ~/.bash_login ; ~/.profile
打通路徑:
PATH=$PATH:$HOME //$HOME代表需要添加到路徑變量中的目錄名
Shell Programming
shell程序: 一種解釋執行的腳本(script)語言,類似於DOS 下的.bat文件,但功能更強.
shell是按行解釋執行的,註釋在行首加#,習慣文件的第一行以”#!/bin/sh”開頭,指明使用哪種解釋器.
執行方式(三種):
1、$ sh < file.sh
2、$ sh file.sh
3、首先修改shell程序的權限爲用戶可執行,如: $ chmod +x file.sh
然後在命令行下直接輸入:$./file.sh (未打通路徑,若打通路徑,./ 不需要)
shell變量的使用
變量的賦值,變量的引用(在變量名前加$)如
不同的引號對shell變量產生不同的效果
1、單引號’ ’:shell將單引號中的內容看成純粹的字符串
2、雙引號” ”:shell對雙引號中的特殊字符進行解釋
3、反引號` `:對反引號中的內容作爲shell命令執行
變量的作用域
shell變量也有局部定義和全局定義之分。不做特殊說明的變量均是局部變量,只在爲它賦值的shell進程中起作用。要是變量在多個進程中都能起作用,通過export命令使其變爲全局變量.
命令的位置變量
在shell中命令的位置變量類似於C語言中argc和argv參數的功能,它們主要對命令行中各個參數的位置進行描述。記住$# ; $* ;$? ;$$ ;$!的定義
$# 位置參數的個數
$* 用單字符串顯示傳遞參數
$? 爲前一命令返回的狀態值(0爲正常)
$$ 當前shell進程的pid值
$! 最近訪問的後臺進程的pid值
test命令的使用
格式: test expre 或 [expre]
當表達式的值爲真時,test命令返回真值0,否則返回假值非0.
1、對文件特性的測試:test –[dfrwxs] file
1、對字符串內容的測試
test s ——當字符串S爲非空時,測試結果爲真值
test -zs ——當字符串S爲空時,測試結果爲真值
test s1 = s2 ——當字符串S1與s2相同時,測試結果爲真值
test s1! = s2 ——當字符串S1與s2不相同時,測試結果爲真值
2、對整數N的測試
test n1 –eq n2——當整數n1與n2相等時,返回真值;
test n1 –ne n2——當整數n1與n2不相等時,返回真值;
test n1 –lt n2——當整數n1小於n2時,返回真值;
test n1 –le n2——當整數n1小於等於n2時,返回真值;
test n1 –gt n2——當整數n1大於n2時,返回真值;
test n1 –ge n2——當整數n1大於等於n2時,返回真值;
條件控制語句
v if語句
(1) 無分支條件語句:if then fi
(2)二分支條件語句:if then else fi
(3)多分支條件語句:if then elif then fi
v case語句: case in 結構
caseword in
pattern-1) pat1-list1;;
pattern-2) pat2-list2;;
……
*) default-list;;
esac
循環語句
v for循環: for in done結構
v while循環: while do done結構
v until循環: until do done
將不必要的信息送入系統垃圾文件/dev/null (黑洞)中