1. 程式人生 > >如何寫出安全的、基本功能完善的Bash指令碼

如何寫出安全的、基本功能完善的Bash指令碼

每個人或多或少總會碰到要使用並且自己完成編寫一個最基礎的Bash指令碼的情況。真實情況是,沒有人會說“哇哦,我喜歡寫這些指令碼”。所以這也是為什麼很少有人在寫的時候專注在這些指令碼上。 我本身也不是一個Bash指令碼專家,但是我會在本文中跟你展示一個最基礎最簡單的安全指令碼模板,會讓你寫的Bash指令碼更加安全實用,你掌握了之後肯定會受益匪淺。 ### 為什麼要寫Bash指令碼 其實關於Bash指令碼最好的解釋如下: > > The opposite of "it's like riding a bike" is "it's like programming in bash". > > A phrase which means that no matter how many times you do something, you will have to re-learn it every single time. > > — Jake Wharton (@JakeWharton) > > > > December 2, 2020 意思就是,跟騎自行車相反,無論做了多少次,每次都感覺像重新學一樣。 但是Bash指令碼語言和其他一些廣受歡迎的語言,例如JavaScript一樣,他們不會輕易突然消失,雖然Bash指令碼語言不太可能成為業界的主流語言,但實際他就在我們周圍,無處不在。 Bash就像繼承了shell的衣缽一樣,在每臺linux上都可以看到他的身影,這可是大多數後端程式執行的環境,因此當你需要編寫伺服器的應用程式啟動、CI/CD步驟或整合測試用的指令碼,Bash就在那裡等著你。 將幾個命令粘在一起,將輸出從一個傳遞到另一個,然後只啟動一些可執行檔案,Bash是眾多方案中最簡單的一個。雖然用其他語言編寫更大、更復雜的指令碼更有效果,但你不能指望Python、Ruby、fish或其他任何你認為最好的程式,可以在任何地方編譯使用。所以在將其新增到某個prod server、Docker image或CI環境之前,往往會讓人三思而後行。 當然啦,Bash還遠遠不夠完美兩個字。他的語法對初學者就像一個噩夢。錯誤處理也很困難。到處都是我們必須處理掉的陷阱。 ### Bash script template(Bash指令碼模板) 廢話不多說,獻上我的模板 ``` bash #!/usr/bin/env bash set -Eeuo pipefail trap cleanup SIGINT SIGTERM ERR EXIT script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) usage() {