什麼是Shell(命令解譯器)

讀取並解譯使用者輸入的指令,啟動程式或顯示結果的程式。Linux 上常用 bash 與 zsh。它具有萬用字元展開、變數、重新導向與管線、工作控制等功能,也能執行把指令排列在一起的檔案(shell 腳本),將作業自動化。由於它像包住作業系統核心的「殼」一樣,站在核心與使用者之間,因而得名。

日文名稱: シェル

「Shell(命令解譯器)」出現在2領域的11道練習題中(Linux與命令列基礎, 連結器與載入器與執行檔格式等)。

這個名詞所屬的領域: Linux與命令列基礎

指令執行之前

shell 讀取輸入的一行後,先進行變數展開、萬用字元展開(glob)與引號處理,再分成指令名稱與引數。指令名稱不含斜線時,會執行內建指令,或依序搜尋環境變數 PATH 中的目錄,啟動找到的執行檔。依照重新導向與管線的指定,重新連接標準輸入、標準輸出、標準錯誤輸出的去向,也是 shell 的工作。

shell 腳本

在排列指令的檔案第1行寫上 #!/bin/bash 這類 shebang,並加上執行權限,就能像程式一樣執行。引數以 $1、$2,引數個數以 $#,上一個指令的結束狀態以 $? 參照,並可用 if、for、while 撰寫條件分支與迴圈。常用於批次執行模擬、統計日誌等固定步驟的自動化。

各種 shell

除了 Linux 上廣泛使用的 bash,還有互動功能豐富的 zsh 與 fish,以及輕量、啟動快速的 dash 等。只用 POSIX 標準規定的 sh 語法撰寫的腳本,能在許多 shell 上執行。EDA 工具的環境設定腳本至今仍可見到以 csh 系(csh、tcsh)語法撰寫的,以 source 讀入的設定檔必須配合 shell 的種類。

練習Shell(命令解譯器)的題目

touch 以 666、mkdir 以 777 去掉 umask 的位元,作為新檔案與新目錄的權限。在 umask 為 027 的 shell 中建立新檔案與新目錄時,兩者權限的組合何者正確?

  1. A檔案 637、目錄 750
  2. B檔案 640、目錄 750
  3. C檔案 750、目錄 750
查看答案與解析

正確答案:B. 檔案 640、目錄 750

umask 表示從新建立的檔案或目錄「去掉」的權限位元。027 從群組去掉寫入(2),從其他人去掉讀取、寫入、執行(7),因此檔案從 666 成為 rw-r-----(640),目錄從 777 成為 rwxr-x---(750)。這不是八進位的減法,而是逐位元去掉的計算(666 AND NOT 027)。常用的 umask 022 以同樣的計算,檔案為 644,目錄為 755。

常見問題

shell 與終端機有什麼不同?

終端機(終端機模擬器)是負責顯示文字、接收鍵盤輸入的視窗程式。shell 在其中運作,把收到的字串當作指令解譯並執行。在同一個終端機中,也可以從 bash 切換成 zsh 使用。

以「source 檔名」與「./檔名」執行有什麼不同?

以 ./檔名 執行時,會由新的 shell 行程執行腳本,因此在其中改變的變數或目前目錄,結束後不會留在原本的 shell 中。source(或 .)則在目前的 shell 中執行檔案的內容,所以環境變數等設定會直接保留。用 source 讀入準備工具環境的設定檔,就是這個原因。

解析中的「Shell(命令解譯器)」

出現「Shell(命令解譯器)」的題目(11題)

  1. touch 以 666、mkdir 以 777 去掉 umask 的位元,作為新檔案與新目錄的權限。在 umask 為 027 的 shell 中建立新檔案與新目錄時,兩者權限的組合何者正確?
  2. 在 shell 中執行上面兩行時,顯示的字元是下列何者?
  3. 在 shell 腳本中,上面 if 的條件為真的情況是下列何者?
  4. C語言的main函式以「return 3;」結束時,該值3一般會如何處理?
  5. 在家目錄執行「ls」只顯示 notes.txt,執行「ls -a」則顯示「.」「..」「.bashrc」「notes.txt」。下列哪一個是對此結果的正確說明?
  6. 某個目錄中有 a1.txt、a2.txt、a10.txt、b1.txt、c1.txt、a1.csv 共6個檔案。在此目錄執行「ls [ab]?.txt」時,顯示的檔案數量是下列何者?
  7. 以 GNU 的 find 執行 find /data -name "*.log" -mtime +7 -size +100M 時,找到的檔案是下列何者?
  8. 在以 SSH 連線的伺服器上,用「./run.sh &」啟動耗時的處理後中斷連線,結果處理也停止了。要讓處理在中斷連線後繼續執行,最適當的啟動方式是下列何者?
  9. 依序執行上面的指令時,兩個 echo 的輸出是下列何者?
  10. 目前目錄中有附加執行權限的腳本 run.sh,輸入「run.sh」執行時出現「command not found」,輸入「./run.sh」則能執行。理由是下列何者?
  11. 依序執行上面的指令時,兩個 bash -c 的輸出組合是下列何者?

相關名詞

變數 檔案權限 環境變數 回傳值 SSH 輸入輸出重新導向 引數 正規表示式 訊號(Unix) 符號連結

前往名詞解釋列表