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