利用 Shell 腳本自動化命令的五種方法
當您的計算機可以為您完成時,不要浪費時間記住長命令。
本文使用的是 MacOS
Shell 編寫由 UNIX 終端執行的命令序列。 這意味著您可以使用它們與命令行界面 (CLI) 進行交互,甚至可以編寫自己的邏輯。 本文將向您展示如何使用簡單的 shell 腳本作為您自己的 CLI。
Shell 腳本的用例
- 縮短長 CLI 函數
- 運行多個連續函數
- 實現邏輯以確定要執行的適當命令
制作 bin 目錄
如果您希望能夠從任何地方運行您的腳本,那么好消息,您可以!
基于 UNIX 的操作系統(例如 MacOS 和 Linux)會將位于 ~/bin 目錄中的所有 shell 腳本納入范圍。
通過在終端中運行以下命令來檢查您是否擁有它。
如果你沒有這個文件夾,你的終端會回復“目錄~/bin 不存在”。
如果您收到此消息,請運行命令 mkdir ~/bin。
示例 1:Hello World
讓我們從一個基本腳本開始,以幫助您掌握它!
在您的終端中,執行以下命令:
這會將您的終端移動到 bin 作為您的工作目錄,創建一個名為 hello 的文件,并授予它作為可執行文件運行的權限。 在您選擇的代碼編輯器中打開文件。
注意:#!/bin/bash 告訴您的設備將文件作為 bash 腳本運行,沒有它腳本將無法運行。
現在讓我們運行文件!
如您所見,我可以從計算機上的任何目錄運行腳本!
示例 2:引入參數
既然我們已經掌握了基礎知識,那么在進入我一直使用的腳本之前,讓我們看一下稍微復雜一點的 hello world 版本!
Shell 腳本保留了變量名稱,例如 $1、$2、$3 等。這些是命令行參數的替身。 讓我們在我們的 hello 腳本中使用它們,如下所示:
讓我們將這個概念應用到一個真實的例子中。
許多使用 Java 編碼的人可能都知道,您必須先將 .java 文件編譯為 .class 才能運行它,這是兩個單獨的命令。 讓我們制作一個 shell 腳本,將它們組合成一個“編譯并運行”命令!
如果您在創建新腳本時需要幫助,可以跳回 hello world 步驟。 我將此文件稱為“javab”
示例 3:縮短現有命令
如果你之前用過FFmpeg壓縮過視頻文件,你就會知道這個命令并不短,而且通常每一步都很難記住。 這是一個使用 25 的恒定速率因子 (CRF) 的示例。
這是我經常運行的命令,用于壓縮 mac 屏幕錄制并將其轉換為 mp4。 讓我們嘗試使用 shell 腳本來簡化它!
如果你沒有安裝 FFmpeg,你可以在這里下載。
我稱這個文件為“壓縮”。
現在,我可以從任何工作目錄壓縮視頻并將新文件保留在同一目錄中。 如果你愿意,你可以添加一些額外的邏輯,比如
此命令將 $1 中文件名的擴展名去掉,并將其替換為 .mp4。 如果命令運行成功,則刪除原始文件,否則不執行任何操作
示例 5:循環和 If
這將是我們最后的也是最復雜的例子,但它也是我使用最多的例子。
如果您曾經有許多不同的遙控器鏈接到 heroku、github、bitbucket 等,并且想要推送到所有這些,那總是很麻煩。
特別是如果您進行了許多小提交并希望與同事分享您的最新更改以防止合并沖突。
這是一個簡短的“保存”腳本,它將提交您的最新更改,然后推送到您的遙控器!
結論
總之,您已經學會了如何使用參數、字符串操作、條件(if 語句和 &&)和循環來自動化本地命令行工作流。
您現在能夠更好地利用您的 shell 腳本知識來推進您的工作并節省一些時間!