# 1.什么是Shell?
Shell是在Linux/UNIX下的命令解釋型語言(command-language interpreter),它的中文翻譯為“殼”主要是用于人機交互,以下截圖為macOS中的Bash終端。

我們再來看一下Shell在Linux/UNIX系統中的一個位置。從技術的角度來說Shell是一個使用者與系統的交互界面\(interface\), 只能讓使用者通過命令行\(command line\)來使用系統來完成工作。 因此,Shell最簡單的定義就是----命令解釋器\( Command Interpreter\):
* 將使用者的命令翻譯給kernel來處理;
* 同時,將kernel的處理結果翻譯給使用者。
Linux\UNIX系統體系結構圖,圖1。

# 2.Shell的種類
Linux/UNIX Shell的種類很多,目前流行的Shell包括ash、bash、ksh、csh、zsh等,用戶可以通過查看/etc/shells 文件中的內容來查看自己主機中當前有哪些種類的Shell。
```
cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
```
不同種類Shell間的歷史背景:
* BourneShell\(sh\):是由AT&T Bell實驗室的 Steven Bourne為AT&T的Unix開發的,它是Unix的默認Shell,也是其它Shell的開發基礎,Bourne Shell在編程方面相當優秀,但在處理與用戶的交互方面不如其它幾種Shell。
* BourneAgain Shell \(即Bash\):是自由軟件基金會\(GNU\)開發的一個Shell,它是Linux系統中一個默認的Shell。Bash不但與Bourne Shell兼容,還繼承了C Shell、Korn Shell等優點。
* ash:ash Shell是由Kenneth Almquist編寫的,是Linux 中占用系統資源最少的一個小Shell,它只包含24個內部命令,因而使用起來很不方便。
* CShell\(csh\):是加州伯克利大學的Bill Joy為BSD Unix開發的,共有52個內部命令,與sh不同,它的語法與C語言很相似。它提供了Bourne Shell所不能處理的用戶交互特征,如命令補全、命令別名、歷史命令替換等。但是,C Shell與BourneShell并不兼容。該Shell其實是指向/bin/tcsh這樣的一個Shell,也就是說,csh其實就是tcsh。
* KornShell\(ksh\):是AT&T Bell實驗室的David Korn開發的,共有42 條內部命令,它集合了C Shell和Bourne Shell的優點,并且與Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和編程交互界面都很好。
* zch:是Linux 最大的Shell之一,由Paul Falstad完成,共有84 個內部命令。如果只是一般的用途,沒有必要安裝這樣的Shell。
大部分的Linux操作系統的預設Shell都是bash,其原因大致如下兩種:
* 自由軟件
* 功能強大 Bash是gnu project最成功的產品之一,自推出以來深受廣大Linux/UNIX用戶的喜愛, 且也逐漸成為不少組織的系統標準。
而目前互聯網公司主流操作系統是CentOS,他默認的Shell就是Bash所以我們課程以介紹Bash為主,如果期間談到其他Shell會以注釋方式提示讀者。
- Introduction
- 1.Shell編程基礎
- 什么是Shell
- 編寫第一個Bash程序
- 2.變量
- 什么是變量
- 變量四種賦值方式
- 指定變量類型
- 變量的類型
- 特殊變量
- 3.Bash符號相關
- Bash符號相關
- 特殊符號
- 數學運算符號
- 4.內建命令與外部命令
- 內建命令與外部命令
- 5.read命令
- read命令
- 6.條件語句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件測試符
- 字符串判斷、與、或和非
- []與[[]]符號
- 7.Bash循環 && 分支語句
- while循環語句
- for循環
- for..in循環
- until循環
- select循環
- case分支語句
- 8.正則表達式
- 正則表達式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函數與函數的加載
- 函數語法與案例
- 遞歸函數
- 函數的加載
- 11.Bash腳本風格
- Bash腳本風格
- 12.Bash腳本調試
- Bash腳本調試
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash雜項 && 案例
- while循環的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh區別
- 命令雜項
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表