


北京Linux培訓
達內北京天壇中心
010-62126400
5分鐘進階 Linux Bash腳本,下面和達內北京Linux培訓機構一起來看看吧!
腳本安全
我的所有bash腳本都以下面幾句為開場白:
這樣做會避免兩種常見的問題:
引用未定義的變量(缺省值為“”)
執行失敗的命令被忽略
需要注意的是,有些Linux命令的某些參數可以強制忽略發生的錯誤,例如“mkdir -p” 和 “rm -f”。
還要注意的是,在“errexit”模式下,雖然能有效的捕捉錯誤,但并不能捕捉全部失敗的命令,在某些情況下,一些失敗的命令是無法檢測到的。(更多細節請參考這個帖子。)
腳本函數
在bash里你可以定義函數,它們就跟其它命令一樣,可以隨意的使用;它們能讓你的腳本更具可讀性:
還有一些例子:
盡可能的把你的bash代碼移入到函數里,僅把全局變量、常量和對“main”調用的語句放在最外層。
變量注解
Bash里可以對變量進行有限的注解。最重要的兩個注解是:
local(函數內部變量)
readonly(只讀變量)
這樣,你可以將一個以前不是只讀變量的變量聲明成只讀變量:
盡量對你bash腳本里的所有變量使用local或readonly進行注解。
用$()代替反單引號(`)
反單引號很難看,在有些字體里跟正單引號很相似。$()能夠內嵌使用,而且避免了轉義符的麻煩。
用[[]](雙層中括號)替代[]
使用[[]]能避免像異常的文件擴展名之類的問題,而且能帶來很多語法上的改進,而且還增加了很多新功能:
單中括號:
雙中括號
正則表達式/Globbing
使用雙中括號帶來的好處用下面幾個例子最能表現:
注意,從bash 3.2版開始,正則表達式和globbing表達式都不能用引號包裹。如果你的表達式里有空格,你可以把它存儲到一個變量里
按Globbing方式的字符串比較也可以用到case語句中:
字符串操作
Bash里有各種各樣操作字符串的方式,很多都是不可取的。
基本用戶
替換操作(使用globbing)
刪除頭部或尾部(使用globbing)
避免使用臨時文件
有些命令需要以文件名為參數,這樣一來就不能使用管道。這個時候?<()?就顯出用處了,它可以接受一個命令,并把它轉換成可以當成文件名之類的什么東西:
還有一個非常有用處的是”here documents”,它能讓你在標準輸入上輸入多行字符串。下面的’MARKER’可以替換成任何字詞。
如果文本里沒有內嵌變量替換操作,你可以把第一個MARKER用單引號包起來:
內置變量
提示:
使用$*很少是正確的選擇。
$@能夠處理空格參數,而且參數間的空格也能正確的處理。
使用$@時應該用雙引號括起來,像”$@”這樣。
調試
對腳本進行語法檢查:
跟蹤腳本里每個命令的執行:
跟蹤腳本里每個命令的執行并附加擴充信息:
你可以在腳本頭部使用set -o verbose和set -o xtrace來永久指定-v和-o。當在遠程機器上執行腳本時,這樣做非常有用,用它來輸出遠程信息。
什么時候不應該使用bash腳本
你的腳本太長,多達幾百行
你需要比數組更復雜的數據結構
出現了復雜的轉義問題
有太多的字符串操作
不太需要調用其它程序和跟其它程序管道交互
擔心性能
這個時候,你應該考慮一種腳本語言,比如Python或Ruby。(本文來源網絡)
達內北京Linux培訓機構為幫助零基礎想轉行的學員選對方向,特推出為期5天26門熱門互聯網技術任意免費學,12月免費課程搶先中!運維技術免費學,莫錯良機!
怕錢不夠?就業掙錢后再付學費; 怕學不會?0基礎入學,達內定制課程; 擔心就業? 近16萬家雇主企業,推薦名企就業