--- 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>