【注】本文譯自: An Introduction to Bash Scripting
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMzkjMzcjZlRTOyI2YjNDOxYzXwEjNwAjM0AzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
Bash 腳本簡介
幻想自己是計算機科學家、業餘愛好者或技術書呆子嗎?然後在某個時候,您将或應該考慮在您的數字工作區中使用 Bash 腳本。
Bash (Bourne Again Shell) 是一個解釋器,負責處理Unix系統指令行上的指令。它是由 Brian Fox 編寫的免費軟體,并于 1989 年釋出的免費軟體,作為 Sh(Bourne Shell)的替代品。Bash 被開發人員、資料科學家、系統管理者、網絡工程師和任何其他在日常工作中嚴重依賴 Unix 作業系統的人使用。一般來說,Bash 腳本用于自動化計算機科學家可能承擔的日常補救任務。簡而言之,shell 腳本隻不過是存儲在一個檔案(如清單)中的一系列指令。
您可以在 Linux 和 MacOS 機器上使用 Bash,甚至可以通過适用于 Linux 的 Windows 子系統在 Windows 10 機器上使用。Bash 通常在文本視窗中運作,使用者可以在其中鍵入指令讓計算機執行操作。該語言還可用于從檔案讀取和執行指令,稱為 shell 腳本。Shell 腳本本身就是一種程式設計語言,與任何其他語言一樣,Bash 是一種可以以多種方式使用的工具。
如果您之前見過運作 Linux 作業系統(或類 Unix 環境)的機器,您可能也見過終端控制台。終端是使用者使用某些指令與 shell 解釋器進行互動的方式。諸如 cd 導航檔案目錄,ls 列出目前目錄中的檔案,以及 nano 編輯檔案等指令。
在終端中使用 Bash 代碼,它将由 Bash 解釋器運作。ls 之類的指令是位于 /bin 目錄中的二進制可執行檔案。 當 shell 收到該指令時(當您在終端中鍵入它并按 Enter 鍵時),它會執行 ls 檔案并為使用者列出目前目錄中的檔案。使用指令 ls /bin 以路徑 /bin 作為選項執行二進制 ls,列出 /bin 目錄中的檔案。執行 ls -al 會運作帶有标志 -a 和 -l 作為選項的 ls 指令,列出目前目錄路徑中的所有檔案和目錄以及有關這些項目的詳細資訊。
touch 是另一個這樣的二進制可執行檔案,使用者可以在終端中使用的指令。 此指令的輸出是一個新檔案,使用者輸入的名稱作為選項。例如,使用者可以編寫 touch hello.txt,輸出将是一個檔案 hello.txt。
如何運作多個 Bash 指令
要運作多個 Bash 指令并讓它們一次執行,使用者可以将這些指令儲存在單個檔案中,以便用 bash 執行。假設您在 Unix/類 Unix 環境中工作,讓我們考慮一下我們之前讨論過的内容。
打開指令終端後,首先使用您喜歡的文本編輯器,例如 nano 或 vi。寫入:
nano make_a_file.txt
然後,寫出以下内容:
#create a file
touch hello.txt
#list files from this directory
ls -al
儲存并退出檔案,并使用以下指令文法之一運作新腳本:
sh make_a_file.txt
或
./make_a_file.txt
bash make_a_file.txt
如果執行該檔案時出錯,請通過輸入以下内容繼續為您剛剛編寫的腳本檔案設定可執行權限:
chmod +x hello.sh
如果您遵循了這個示例,那麼您剛剛建立了一個包含多個 Bash 指令的檔案。Bash 解釋器将按順序運作這些指令并忽略以哈希符号 # 開頭的行,因為這些行是注釋。運作該檔案會産生一個檔案清單的終端輸出,其中将包含一個 hello.txt,之前沒有。
通常,一個 Bash 腳本檔案以包含 .sh 擴充名的格式儲存,這表明該檔案是一個 shell 腳本。但是,當檔案以“she-bang”或“hashbang”開頭時,我們可以像二進制檔案一樣執行它。
在建立腳本時,我們應該考慮到每個二進制 shell 檔案都以俗稱的“she-bang”(也稱為 sh-bang 或 hashbang)開頭。這是腳本标題的開始,第一行代碼訓示您将使用哪個 shell。在制作腳本時,我們有多種選擇可供選擇,包括 shell (sh)、C Shell、Z Shell 等。在這種情況下,我們将繼續使用 Bash 來滿足我們的腳本需求。She-bang 是腳本開頭的一組符号“#”和“!”。我們知道井号 (#) 表示一行是注釋。 然而,使用 she-bang,類 Unix 系統的程式解釋器會将第一行的其餘部分解析為解釋器指令。在這種情況下,在寫入 #!/bin/bash 時,哈希符号和感歎号作為程式加載器的訓示符,訓示它使用位于 /bin/bash 目錄的 Bash Shell 程式。
如何在 Bash 中建立變量
像大多數其他 Unix shell 一樣,Bash 具有變量、管道、檔案名通配符、here 文檔、指令替換和控制流。Bash 還支援交替(它與 C shell 共享)、指令行完成以及信号處理和基本調試。有了這些特性,bash 成為 Unix 和類 Unix 系統的預設指令解釋器也就不足為奇了。
像其他程式設計語言一樣,我們可以在使用 Bash 編寫腳本時聲明變量。但是,與其他語言不同,Bash 不需要關鍵字來聲明變量或為其配置設定資料類型。Bash 沒有類型系統,僅将變量儲存為字元串值。但是,Bash 可以根據某些操作(例如算術運算)自動将變量轉換為合适的類型。要寫入變量并為其填充值,請以 VARIABLE=VALUE 格式寫入内容,確定不包含空格。下面是一個示例,展示了如何在 Bash 中建立變量:
#!/bin/bash
#write a variable
NAME=“William”
#use that variable
echo “Hello $NAME”
使用者還可以通過使用者輸入來填充變量:
#!/bin/bash
echo “Hello $1, that is a $2 name”
在終端中:
~$bash name.sh “William” “great”
Hello William, that is a great name
還可以使用 read 之類的指令在運作時使用使用者輸入的變量:
#!/bin/bash
echo “What is your name?”
read name
echo “Hello $name”
~$bash name.sh
What is your name?
~$William
Hello William
Bash 中的 if 語句
我們還可以為附加功能實作 if 語句。
#!/bin/bash
echo “Who is there?”
read name
if [ $name ]
echo “Hello $name”
else
echo “Must’ve been my imagination”
fi
~$bash name.sh
Who is there?
~$
Must’ve been my imagination
如何在 Bash 中建立備份管理腳本
其他需要考慮的項目包括設定備份管理腳本。這可以是一個簡單的項目,可以開始并在以後重新通路。有了這個,您可以制作一個簡單的腳本,針對一個或多個檔案和檔案夾使用 tar 庫進行壓縮,并将其放置在您選擇的新備份目錄中。以下腳本是一個基本的備份腳本,它為需要備份的檔案建立一個 .Zip 檔案,并根據建立日期對它們進行标記:
#!/bin/bash
#get the month, day, and year of the current date
TIME_OF_BACKUP=`date +%m-%d-%y`
#create a backup file using the current date in its name
DESTINATION=/path/[BACKUP FOLDER]-$TIME_OF_BACKUP.tar.gz
#the folder that contains the files that we want to backup
TARGET_FOLDER=/path/[TARGET FOLDER]
#create the backup
tar -cpzf $DESTINATION $TARGET_FOLDER
作為獎勵,您可能希望通過為備份腳本添加計劃執行來增加此項目的一些複雜性,并增加自動化級别。為此,您可以使用 crontab 程式和指令庫。如果您需要安裝 cron,請確定在繼續安裝 cron 之前更新您目前的包庫。
sudo apt-get update
sudo apt-get install cron
成功安裝後,您可以繼續使用 cron 庫來安排腳本的執行。
crontab -e
@weekly /path/backup_script.sh