2014年1月7日 星期二

[Linux] shell

shell (殼程式)
  • 只要能夠操作應用程式的介面都能夠稱為殼程式。
  • 狹義的殼程式指的是指令列方面的軟體,ex: bash 等。 
  • 廣義的殼程式則包括圖形介面的軟體!因為圖形介面其實也能夠操作各種應用程式來呼叫核心工作。


shell 依據發展者的不同有許多的版本:
  • Bourne shell (sh)
    • 第一個流行的 shell 是由 Steven Bourne 發展出來的,所以稱為 Bourne shell (sh)。
  • C SHell (csh)
    • 預設在 Sun 裡頭的
    • 是由柏克萊大學的 Bill Joy 設計依附於 BSD 版的 Unix 系統中的 shell ,這個 shell 的語法有點類似 C 語言,所以才得名。
    • 由於在學術界 Sun 主機勢力相當的龐大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一個很重要而且流傳很廣的 shell 之一 。
  • Linux 使用的這一種版本就稱為『 Bourne Again SHell (簡稱 bash) 』
    • Bourne Shell 的增強版本。
    • 基準於 GNU 的架構下發展出來的。
    • 另外還有商業上常用的 K SHell、TCSH 等等。


shell script (程式化腳本)
  • 是利用 shell 的功能所寫的一個『程式 (program)』。
  • 這個程式是使用純文字檔,將一些 shell 的語法與指令(含外部指令)寫在裡面, 搭配正規表示法、管線命令與資料流重導向等功能,以達到我們所想要的處理目的。


#!/bin/bash
  • 在宣告這個 script 使用的 shell 名稱
    • 其他還如: 
      • #!/bin/sh
      • #!/bin/ksh
      • #!/usr/bin/php
  • 宣告這個檔案內的語法使用 bash 的語法!那麼當這個程式被執行時,他就能夠載入 bash 的相關環境設定檔 (一般來說就是 non-login shell 的 ~/.bashrc)


shell script 的預設變數 $0, $1, $2...
ex:
/path/to/scriptname opt1 opt2 opt3...
             $0               $1    $2    $3

$# :代表後接的參數『個數』,以上表為例這裡顯示為『 4 』;
$@ :代表『 "$1" "$2" "$3" "$4" 』之意,每個變數是獨立的(用雙引號括起來);
$* :代表『 "$1c$2c$3c$4" 』,其中 c 為分隔字元,預設為空白鍵, 所以本例中代表『 "$1 $2 $3 $4" 』之意。


* Reference
- 第十三章、學習 Shell Scripts

沒有留言:

張貼留言