# 學習計畫--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>