---
# System prepended metadata

title: 'LinuxShell: Chap1 Shell introduction'
tags: [' bash', linux-shell]

---

---
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
![](https://i.imgur.com/mN9YQ9o.png)
### 1.2 What does shell do?
**shell本意為"殼"**
shell就是Kernel外的一層殼,負責接收使用者輸入的指令,
然後將指令解析成Kernel能理解的格式,傳送給Kernel執行
Kernel執行完，再把結果輸出到週邊系統(硬體)
![](https://i.imgur.com/3jtOsR0.jpg)
### 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>