---
tags: linux-shell, bash
---
# LinuxShell: Chap1 Shell introduction
## references
[shell-2017-v3.tgz](https://shell.olds.net/DL/shell-2017-v3.tgz)
[鳥哥的私房菜](http://linux.vbird.org/linux_basic/0320bash.php#bash)
## uzip method
tar xvzf shell-2017-v3.tgz
## 1 What is Shell?
### 1.1 why Shell?
Linux/BSD系統可以分成三個重要的部份:
1 核心(Kernel)
2 Shell
3 工具程式
核心的部份相當低階,使用者不易跟Kernel直接溝通
所以需要一個友善的介面(interface),讓使用者更方便操作
而這個介面(interface)就是shell

### 1.2 What does shell do?
**shell本意為"殼"**
shell就是Kernel外的一層殼,負責接收使用者輸入的指令,
然後將指令解析成Kernel能理解的格式,傳送給Kernel執行
Kernel執行完,再把結果輸出到週邊系統(硬體)

### 1.3 目前流行的shell
| shell名稱 | 執行檔名 | 原始開發者 | 有無開源版本或衍生版本 | 授權協議 |
| ------------------------------- | ------------ | ------------------- | ---------------------- | ----------------- |
| Bourne shell(sh) | /bin/sh | Stephen Bourne | 有 | BSD/Public Domain |
| Bourne Again shell(bash) | /bin/bash | Brian Fox/ChetRamey | 有 | GPL |
| Korn shell 93(ksh93) | /bin/ksh | David Korn | 有 | CPL |
| Public Domain Korn shell(pdksh) | /bin/ksh | Eric Gisin | 有 | Public Domain |
| C shell(csh) | /bin/csh | Bill Joy | 有 | BSD |
| Tenex C shell(tcsh) | /bin/tcsh | Ken Greer | 有 | BSD |
| Z-shell(zsh) | /usr/bin/zsh | Paul Falstad | 有 | MIT-like |
## 2 Shell History
### 2.1 Bourne shell
Bourne shell是第一個重要的shell
如此命名是為了紀念此shell的發明者Bourne
1979年Unix版本7發行時,開始使用了Bourne shell
Bourne shell取代原本Unix上的Thompson shell並且沿用執行檔名sh
### 2.2 C shell
C shell為第一個廣泛使用的shell,主要附在BSD版的Unix系統
作者柏克萊大學的Bill Joy
C shell主要因為語法跟C語言類似而得名
### 2.3 What is bash(Bourne Again Shell)?
Bash 是眾多shell的其中一種,誕生於1988
最初的作者是Brian Fox, Chet Ramey於1989年加入
目前官方的維護者是Chet Ramey,許多重要的功能接是在Chet Ramey手中完成
Bash shell是GNU計畫的重要工具軟體之一,也是GNU/LINUX作業系統中預設的shell
Bash相容於sh,所以早期開發出來的Bourne shell程式可以在Bash shell中運作
Bash 有兩種工作模式:
| 模式名稱 | 意思 |
| -------------------------------------- | ------------------------------------------------------------- |
| 互動模式(interactive mode) | 使用者透過鍵盤鍵入指令,必須等待shell執行完,才能執行下一個指令 |
| shell script模式(non-interactive mode) | 使用者可以把要執行的指令寫在一個檔案,透過Bash去執行跟讀取 |
Bash主要功能特性:
1 相容於Bourne shell
2 取長於ksh, csh, tcsh
3 支援許多選項跟變數,可自定義shell使用環境
4 支援目錄堆疊功能
5 支援歷史命令(history)功能
6 具有命令列編輯的能力,可以重新取用或修改之前執行過得命令
7 具工作控制(job control)的能力,可以控制前景以及背景程式
8 支援平行處理
9 具程式設計的能力,支援變數,真假值判斷,流程控制,函式,輸入輸出控制,新版的Bash支援一維陣列以及關聯陣列
10 容易取得,檔案小,免編譯即可執行,可組合(多個shell script可以結合在一起執行)
[Bash 官網](https://www.gnu.org/software/bash/)
[Bash 維護者網址](https://tiswww.case.edu/php/chet/bash/bashtop.html)
## 3 Practice
### 3.1 hello.sh
```bash=
#!/bin/bash
echo 'hello! Bash shell'
```
在執行前 先要確保hello.sh有execution的權限
```shell=
chmod +x hello.sh
```
### 3.2 clearlog.sh
```bash=
#!/bin/bash
cp /dev/null /var/log/apache2/accesss.log
```
這個shell主要在清空 /var/log/apache2/access.log的內容
### 3.3 rgetfile.sh
```bash=
#!/bin/bash
link="ftp://ftp.gnu.org/bash/bash-4.4.tar.gz"
mkdir -p WORK
cd WORK
wget link
tar xvzf bash-4.4.tar.gz
```
這個shell主要是把bash-4.4.tar.gz抓下來放到WORK資料夾並且解壓縮
### 3.4 install-gcin-at-deb7.sh
```bash=
#!/bin/bash
apt-get update
apt-get install gcin
cat <<EOF > /etc/X11/Xsession.d/99gcin #create xsession file
export GTK_IM_MODULE=gcin
export XMODIFIERS=@im=gcin
export QT_IM_MODULE=gcin
gcin&
EOF
echo 'please relogin again'
```
## Contact info(聯絡資訊)
<a href="mailto:yuanyu90221@gmail.com?subject=contact">yuanyu90221@gmail.com</a>