一份shell「聖經」收好

  • 2019 年 10 月 7 日
  • 筆記

來源:公眾號【編程珠璣】

作者:守望先生

網站:https://www.yanbinghu.com

前言

不知道你是否在為突然想實現某個功能的小腳本而苦苦尋找答案,這裡有一份「聖經」用來查看各種僅使用內置bash命令實現各種常用的功能和鮮為人知的用法。

為什麼要寫腳本?

無論是作為Linux應用開發還是運維,編寫shell腳本都是一個最基本的技能,而使用shell能夠簡潔快速地解決很多問題,提高效率。什麼你還不會?那麼建議你花點時間學一下,畢竟花不了你太多時間就可以讓它給你幹活。你也可以參考這裡了解一下最基本的用法《這些必備的shell知識你都會了嗎?》

為什麼要使用內置bash來實現?

使用內置的bash命令可以避免一些依賴,不至於你的腳本遷移到另外一個系統還需要裝一些依賴,另外一方面,使用這些內置命令常常也會更加高效。

這份」聖經「是怎樣的?

實際上它是github上地一個星標項目,地址如下: https://github.com/dylanaraps/pure-bash-bible 目前星標近20k,它列出了一些常用的功能,有哪些呢,我們可以看看。

  • 字符串
    • 去掉字符串首尾的空格
    • 去掉字符串中的空格並用空格分割
    • 在字符串中使用正則表達式
    • 分割字符串
    • 字符串大小寫轉換
    • 字符串反轉
    • 檢查字符串中是否包含某個子串
    • 檢查字符串是否以某個子串結尾
    • ……
  • 數組
    • 反轉數組
    • 去除數組中重複元素
    • 隨機排列數組元素
    • ……
  • 循環
    • 以數值作為循環條件
    • 以數值變量作為循環條件
    • 以數組作為循環條件
    • 遍歷文件內容
    • 遍歷文件和目錄
    • ……
  • 文件處理
    • 將文件內容讀取到字符串中
    • 將文件內容以行為單位讀取到數組中
    • 讀取文件的前n行
    • 讀取文件的最後n行
    • 創建空文件
    • ……
  • 文件路徑
    • 獲取全路徑中的目錄名
    • 獲取全路徑中的文件名

注意,這裡僅僅是目錄的一小部分,原項目中還有很多內容,包括一些內置變量的獲取,系統信息的獲取,一些常用語法,常見表達式,基本運算等等。

內容是什麼樣子的呢?

舉個例子,如何去掉字符串首尾的元素,它給了一個shell函數:

trim_string() {      # Usage: trim_string "   example   string    "      : "${1#"${1%%[![:space:]]*}"}"      : "${_%"${_##*[![:space:]]}"}"      printf '%sn' "$_"  }  

那麼在shell腳本中就可以這樣調用:

trim_string "    Hello,  World    "  #會打印這個結果:Hello,  World  

而又例如在介紹循環的時候,告訴你一些常見的循環方式:

# Loop from 0-100 (no variable support).  for i in {0..100}; do      printf '%sn' "$i"  done  

或者

VAR=50  for ((i=0;i<=VAR;i++)); do      printf '%sn' "$i"  done  

又或者:

for element in "${arr[@]}"; do      printf '%sn' "$element"  done  

總之作為基礎學習的手冊也是非常不錯了,一些常用的語法在這裡都能看到。

總結

實際上裏面很多相關功能也有一些bash命令可以直接實現,但是大部分內容作為一個速查的渠道還是不錯的,有興趣的可以去查看:

https://github.com/dylanaraps/pure-bash-bible