---
# System prepended metadata

title: 學習計畫–Linux Shell 入門
tags: [Linux Shell, 學習計畫]

---

# 學習計畫--Linux Shell 入門

<details><summary><font size=5>階段一: 了解 Linux Shell</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(一)- Linux Shell 簡介](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_1)

</div>
</details>
<details><summary><font size=5>階段二: 變數、字串、註釋的宣告及基本操作</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(二)- Shell 變數、字串與註釋](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_2)

- 變數的命名規則
- 字串的宣告
- 註釋的宣告
- 變數的基礎使用
  - 透過 $ 來傳遞變數的值
  - 使用 $(command) 來由其他指令的結果來建立變數
  - 使用 readonly 建立唯讀變數
  - 使用 $(()) 來進行整數計算並賦值
  - 使用 (()) 來進行整數計算，並將結果用於條件判斷或改變變數的數值
  - 使用 unset 刪除變數
  - 使用 declare 或 typeset 關鍵字來宣告變數的屬性
  - 特殊參數($0, $1, $2, $@, $*, $#, $?, $$, $!, $-, $_,)
- 字串的基本操作
  - 使用 " " 雙引號及 $ 進行字串拼接
  - 使用 ${#} 獲得字串長度
  - 使用 ${變數:起始位置:長度} 對字串進行切片
  - 使用 expr index 查詢指定的字元在一個字串中最先出現的位置
  - 使用 grep 尋找符合特定模式的那一行


</div>
</details>
<details><summary><font size=5>階段三: 流程控制</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(三)-流程控制](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_3)

- 條件判斷 (if、elif、else)
- 搭配 test 或 [ ] 進行條件測試
- 文件/目錄檢查 (-f、-d、-e 等)
- 數值比較 (-eq、-gt、-lt 等)
- 字串比較 (=、!=、-z、-n 等)
- 多分支選擇 (case): 類似 Kotlin 的 when,處理多個選項時更清晰

</div>
</details>
<details><summary><font size=5>階段四: 迴圈</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(四)-迴圈](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_4)
    
- for 迴圈:遍歷列表或範圍
- while 迴圈:條件為真時持續執行
- until 迴圈:條件為假時持續執行
- break 和 continue:控制迴圈流程

</div>
</details>
<details><summary><font size=5>階段五: 陣列 (Arrays)</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(五)-陣列 (Arrays)](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_5)
- 陣列(Array)
- 陣列的宣告與存取(陣列宣告, 讀取特定元素, 讀取全部元素)
- 陣列的遍歷與操作
- 關聯陣列(Bash 4.0+)

</div>
</details>
<details><summary><font size=5>階段六: 關聯式陣列</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(六)-關聯式陣列（Associative Array）](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_6)

</div>
</details>
<details><summary><font size=5>階段七: 函式，腳本模組化</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(七)-函式、腳本模組化](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_7)
- 避免重複程式碼,讓腳本結構更清晰
- 函數定義與呼叫
- 函數參數傳遞
- 回傳值處理
- 區域變數 vs 全域變數

</div>
</details>
<details><summary><font size=5>階段八: 資料流與 I/O</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(八)-資料流與 I/O](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_8)
    
- 學習如何將一個指令的結果「丟」給下一個指令處理，或是保存到檔案中，而不是只印在螢幕上。
- 串接指令，打造 pipeline
- 檔案操作
  - 讀取檔案內容 (cat、read)
  - 檔案重定向 (&gt;、&gt;&gt;、&lt;)
  - 管道(Pipe) (&#124;)
- 使用者輸入
  - read 指令讀取使用者輸入
  - 帶提示的輸入處理

</div>
</details>
<details><summary><font size=5>階段九: 錯誤處理與防呆</font></summary>
<div>

---
>[!Note][Git筆記--Linux Shell入門(九)--錯誤處理與防呆](https://hackmd.io/@9YAtszqXS2OLNZOrLY_-Jg/git_LinuxShell_9)
- 寫出穩健的腳本,能夠優雅地處理錯誤。
- 錯誤處理
  - 檢查指令執行結果 ($?)
  - 使用 set -e、set -u 等選項
  - 自訂錯誤訊息與 exit 狀態碼
- 除錯技巧
  - 使用 set -x 追蹤執行過程
  - 使用 echo 輸出變數值
  - trap
    
</div>
</details>


