發表文章

影音數位典藏所需的自動化腳本(Bash Script)--函式

影音數位典藏所需的自動化腳本(Bash Script)--函式     在撰寫腳本和程式時,有時候會過到相同的工作會同時出現在不同階段的狀況,例如顯示提示或錯誤訊息。此時,「函式 ( 或稱函數,子程式,function/subroutine)」就是一個好用的工具。如果同樣的功能會在不同腳本中都會用到,例如判斷輸入檔案,也可以寫成函式。在撰寫新的腳本中,可以直接將整個函式整個搬過去,就不用再寫一次了。如果常用的函式累積得夠多,還可以直接整理到一個檔案中,做成函式庫。直接透過引用 (source) 來呼叫函,連複製的動作都可以省略。 函式的完整表示方式為: function   fname () {     command } 其中 fname 就是未來要做成執行指令的名稱,而 command 就是這段指令預期執行的內容。與一般程式寫法不同,腳本有嚴格的前後順序。因此在腳本中的所有函式必需放在主程式段之前,否則會有無法找到函式的問題。 利用函式撰寫產生 MD5 的腳本     前面寫過產生影音檔 metadata 的腳本,相同的架構可以很外的修改成產生以畫格為基礎的 md5 集的功能,只要將最後產生 json 的指令更改如下即可: ffmpeg -i "${input_file}" -f framemd5 "${filename}" 但這樣的腳本中有許多部份可以拆成下列幾個部份: 顯示錯誤訊息 顯示操作說明 讀取目標 判斷目標是否為影音檔 執行主要指令 顯示錯誤訊息 # display an error message and exit function prompt_error() {     echo "Error: ${1:-Unknown Error.}"     exit 1 } 建立一個名為 prompt_error 的函式,這個函式的工作是顯示 "Error: 錯誤訊息"。 因此在後續的指令中,需要顯示錯誤訊息的地方,只要寫成 「prompt_error "錯誤訊息"」 即可。「${1:-Unknown Error.} 」這個寫法代表,應出現在指令後方...

影音數位典藏所需的自動化腳本(Bash/Script)--初級篇

影音數位典藏所需的自動化腳本(Bash Script)--初級篇     如前文所提,腳本是一種可編輯與執行的純文字檔,可以搭配運算元和邏輯,用來執行多個指令,因此撰寫時有幾點要注意: 腳本內的指令與運作基本上有由上而下,由左至右的方向性。 讀取到 [Enter] 符號 (即斷行),就視為下達該行指令。 如需將一行指令拆分為多行,需以反斜線 (\) 做為該行結尾,再使用 [Enter] 鍵換行。 當果要加入註解或暫時跳過某行指令時,在註解開頭加上 # 符號。在 # 之後的文字會被系統忽略。  如同指令中的多個空格會被視為單格,用來縮行的 [tab] 鍵和多個空白鍵會被視為單一空白格,有助於排版和視讀但不會影響指令運作。 如同下達指令,大小寫不同,因此輸入時要確認指令和參數不要打錯。 撰寫第一個腳本     在進入自動化腳本世界,當然要從打招呼開始。因此就從顯示「Hello Bash!」這個字眼開始: bash-4.4$ mkdir bash; cd bash bash-4.4$ nano hello.sh 一開始,先建立了一個名為 "bash" 的資料夾,並進入這個資料夾開始練習。再使用 nano 這個程式來編輯一個名為 "hello.sh" 的腳本。    GNU nano 2.0.6                           File: hello.sh     #!/bin/bash echo "Hello, Bash!" 在 nano 編輯器中,可以輸入這兩行字,來做為第一個腳本的內容。輸入完按 [ctrl]+[x] 鍵離開並儲存。 Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?                            ...