Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Shell 核心觀念與命令語法全解析:從內建指令到萬用字元

編輯:Linux 教學

Shell 是使用者與核心溝通的「殼層」,既是命令解譯器,也是功能強大的解釋型程式語言。本文深入解析 Shell 定位、主流家族、命令執行流程、語法結構、萬用字元與內建/外部指令區別,奠定腳本開發基石。

一、 Shell 是什麼?

  • 定位:圍繞核心的介面程式,使用者任務皆透過 Shell → 核心系統呼叫 → 硬體完成。
  • 雙重身分:
    ① 命令解譯器:解析輸入 → 內建指令直接執行 / 外部指令搜尋 PATH 載入執行
    ② 程式語言:變數、函數、流程控制、I/O 重導向、管線、訊號處理
  • 主流家族:
    bash (Bourne Again Shell) - Linux 預設標準
    zsh - 功能豐富、Oh My Zsh 生態
    fish - 使用者友善、開箱即用
    csh/tcsh - C 風格語法
    ksh - 企業級 Unix 經典
    sh (Bourne Shell) - POSIX 標準最小集

二、 命令執行流程

  1. 使用者輸入命令列 → Enter
  2. Shell 掃描語法分析(別名展開 → 歷史展開 → 參數展開 → 命令替換 → 算術展開 → 萬用字元展開 → 詞拆分 → 路徑展開)
  3. 判斷指令類型:
      ✅ 內建指令(cd, pwd, echo, exit, export...)→ 直接在 Shell 進程執行
      ✅ 函數 → 在當前 Shell 環境執行
      ✅ 別名 → 遞迴展開後重新解析
      ✅ 外部指令 → 搜尋 $PATH 目錄 → 找到可執行檔 → fork() 子進程 → exec() 載入執行
  4. 回傳狀態碼($?),顯示結果

三、 命令語法結構

command [options] [arguments]
# 範例
ls -al /etc
# command=ls, options=-al, arguments=/etc
  • 選項:單字母 -a -l 或合併 -al,長選項 --all --long
  • 參數:指令操作對象(檔案、目錄、字串...)
  • 多指令同行:cmd1; cmd2(循序)、cmd1 && cmd2(前成功才跑後)、cmd1 || cmd2(前失敗才跑後)
  • 跨行續行:cmd \
    arg1 \
    arg2

四、 萬用字元

字元匹配規則範例
*任意長度字串(含空)ls *.txt、cp doc/* /opt
?單一任意字元ls file?.txt 匹配 file1.txt, fileA.txt
[...]字元集合/範圍ls [abc]*.txt, ls [0-9]*.log
[!...]排除字元集合ls [!0-9]*.txt 非數字開頭

注意:萬用字元由 **Shell 展開**,而非指令本身處理。指令看到的已是展開後的檔名清單。

五、 內建 vs 外部指令實測

type cd      # cd is a shell builtin
type ls      # ls is /bin/ls
type awk     # awk is /usr/bin/awk
  • 內建指令:載入記憶體常駐、執行極快、可修改 Shell 狀態(如 cd 變更工作目錄)
  • 外部指令:磁碟載入、獨立進程、無法修改父 Shell 狀態

六、 變數與環境

  • 區域變數:var=value(僅當前 Shell)
  • 環境變數:export var=value(繼承給子進程)
  • 位置參數:$1~$9, $@, $*, $#
  • 特殊變數:$? (退出碼), $$ (PID), $! (背景進程 PID), $0 (腳本名)

七、 結語

Shell 是 Linux 系統的「指揮中心」。精通其語法展開順序、內建/外部指令邊界、萬用字元展開機制、變數作用域,是從「會用指令」邁向「寫出健壯腳本、排查疑難雜症」的必經之路。建議以 bash 為主力,配合 shellcheck 靜態分析工具,養成嚴謹腳本開發習慣。

Copyright © Windows教程網 All Rights Reserved