# 學習計畫--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)
- 檔案重定向 (>、>>、<)
- 管道(Pipe) (|)
- 使用者輸入
- 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>