技能 bash-defensive-patterns
🛡️

bash-defensive-patterns

安全

編寫可靠的 Bash 腳本

也可從以下取得: wshobson

透過防禦性程式設計模式防止常見的 shell 腳本錯誤。此技能提供用於錯誤處理、輸入驗證和安全檔案操作的生產就緒範本,保護您的自動化免受邊緣案例和意外故障的影響。

支援: Claude Codex Code(CC)
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「bash-defensive-patterns」。 建立一個具有錯誤處理功能的腳本,輪替超過 7 天的日誌檔案

預期結果:

腳本將包括:嚴格模式設定 (set -Eeuo pipefail)、日誌目錄驗證、具有適當錯誤處理的 find 命令、壓縮壓縮檔建立、原子檔案操作、暫時檔案的清理陷阱,以及顯示輪替進度和任何遇到的錯誤的結構化日誌記錄。

正在使用「bash-defensive-patterns」。 建立具有回滾能力的部署腳本

預期結果:

生成的腳本特點:用於環境和版本標誌的參數解析、預檢依賴檢查、在變更前建立目前部署的備份、用於零停機部署的原子符號連結切換、從備份還原的回滾函數、每個步驟的綜合日誌記錄,以及在失敗時自動觸發回滾的錯誤處理常式。

正在使用「bash-defensive-patterns」。 編寫一個監控流程並發送警報的腳本

預期結果:

監控腳本包括:使用 kill -0 的流程健康檢查、可設定的流程名稱清單、警報閾值設定、具有指數退避的重試邏輯、通知函數佔位符(電子郵件/slack)、用於優雅關閉的信號處理、使用 PIDs 陣列的後台流程追蹤,以及具有時間戳記用於稽核追蹤的結構化日誌記錄。

安全審計

安全
v1 • 2/25/2026

All 106 static findings are false positives. The skill contains only markdown documentation with code examples demonstrating defensive Bash programming techniques. Command execution patterns, cryptographic references, and file operations are educational examples showing SAFE practices, not executable code. No prompt injection or malicious intent detected.

2
已掃描檔案
564
分析行數
0
發現項
1
審計總數
未發現安全問題
審計者: claude

你能建構什麼

DevOps 管線腳本

建立具有適當錯誤處理、日誌記錄和冪等操作的 CI/CD 管線腳本,能安全失敗並提供清晰的錯誤訊息。

系統管理工具

建立處理邊緣案例、驗證輸入並包含清理處理常式的維護腳本,防止因自動化失敗而導致的系統損壞。

開發工具腳本

編寫具有參數解析、乾跑支援和綜合日誌記錄的開發者生產力工具,用於調試生產環境問題。

試試這些提示

基本安全腳本
建立一個將目錄備份到備份位置的 Bash 腳本。使用嚴格模式、錯誤捕捉,並在繼續之前驗證兩個目錄是否存在。
生產就緒 CLI 工具
編寫一個接受輸入/輸出檔案參數的 Bash 腳本,使用 --input 和 --output 標誌。包括參數驗證、幫助文本、結構化日誌記錄,以及乾跑模式支援。
流程管理腳本
建立一個管理後台流程的 Bash 腳本,具有用於優雅關閉的信號處理常式。追蹤 PID、實作清理陷阱,並正確處理 SIGTERM/SIGINT。
冪等設定腳本
編寫一個建立目錄、設定檔案和服務的 Bash 設定腳本。將其設計為冪等的 - 可安全多次執行而不會造成重複資源或錯誤。

最佳實務

  • 始終在腳本開頭啟用嚴格模式 'set -Eeuo pipefail' 以儘早捕捉錯誤
  • 引用所有變數擴展以防止單詞分割和萬用字元問題
  • 在條件判斷中使用 [[ ]] 而不是 [ ] 以啟用更安全的模式匹配並防止意外的單詞分割

避免

  • 不要使用未引用的變數如 'cp $source $dest' - 這會導致包含空格的檔案名發生單詞分割
  • 避免使用反引號進行命令替換 - 偏好現代的 '$()' 語法以获得更好的巢狀結構和可讀性
  • 切勿單獨使用 'set -e' 而不了解 pipefail - 始終一起使用 'set -Eeuo pipefail' 以獲得完整的錯誤處理

常見問題

為什麼此技能建議使用嚴格模式,即使它會讓腳本在錯誤時退出?
嚴格模式可防止小錯誤變成更大的問題。它會在命令失敗、變數未定義或管線中斷時立即停止執行,使調試變得更加容易,並防止因繼續使用錯誤狀態而導致資料損壞。
我可以在 POSIX sh 中使用這些模式而不是 Bash 嗎?
許多模式(如引用變數和錯誤捕捉)在 POSIX sh 中可用,但某些 Bash 特定功能(如 [[ ]] 條件判斷和陣列)需要 Bash 4.0+。對於嚴格的 POSIX 相容性,使用 [ ] 而不是 [[ ]] 並避免使用陣列。
條件判斷中的 [ ] 和 [[ ]] 有什麼區別?
雙方括號 [[ ]] 是 Bash 特定的,提供更安全的特殊字元處理、防止單詞分割,並支援使用 == 的模式匹配和使用 =~ 的正則表達式。單括號 [ ] 是 POSIX 標準的,但需要更多引用並且行為較不直觀。
為什麼我應該使用 'command -v' 而不是 'which' 來檢查命令?
'command -v' 內建命令是 POSIX 標準的,在所有 shell 中都能一致運作,並且不需要外部流程。'which' 命令並非在所有系統上都可用,並且根據作業系統的不同可能會產生不一致的輸出。
如何處理不應該致命性的腳本失敗?
在可能合法失敗的命令後使用 '|| true',或在 if 語句中包裝命令以明確檢查其退出狀態。對於更複雜的邏輯,您可以在特定區塊中使用 'set +e' 暫時停用嚴格模式,然後使用 'set -e' 重新啟用它。
什麼是冪等性,為什麼它對 shell 腳本很重要?
冪等性意味著腳本無論執行一次還是多次都會產生相同的結果。這對可靠性至關重要 - 如果腳本在中途失敗並重新執行,它不應該建立重複的資源、在現有項目上失敗,或使系統處於不一致的狀態。