Android和Linux操作系統(tǒng)在過去幾年變得非常流行。由于它們的開源性質(zhì),成本是合理的,值得慶幸的是,大量的工程師已經(jīng)加入到將這些操作系統(tǒng)移植到幾乎所有可以想象的平臺的努力中來。它們的廣泛使用使得嵌入式開發(fā)人員幾乎不可避免地會在某個時候投入開發(fā)基于這些系統(tǒng)的系統(tǒng)。
在Linux環(huán)境中進(jìn)行開發(fā)時,最有用的工具之一是使用shell腳本。腳本可以幫助設(shè)置環(huán)境變量,執(zhí)行重復(fù)和復(fù)雜的任務(wù),并確保將錯誤保持在最低限度。由于腳本是從終端內(nèi)部運行的,任何可以從終端手動執(zhí)行的命令或功能也可以自動化!
創(chuàng)建腳本非常直接,它可以通過打開諸如 gedit 之類的編輯器或通過諸如 VI 之類的終端編輯器來創(chuàng)建。 最常見的腳本類型是 bash 腳本。 這些腳本通常與 .sh 擴(kuò)展名相關(guān)聯(lián),但根本不需要包含擴(kuò)展名! 任何腳本的頂部都應(yīng)包含在第一行 #!/bin/bash. 這告訴了應(yīng)該使用什么解釋器來運行腳本。
除此之外,可以自定義腳本以滿足嵌入式開發(fā)人員的需求。一個好的第一個腳本,就像任何程序一樣,是創(chuàng)建一個“Hello World”腳本。除了解釋器說明符之外,clear 用于清除任何先前消息的終端,而 echo 用于輸出文本。
創(chuàng)建腳本后,可以使用終端運行它。 但是,立即將腳本作為 ./scripts.sh 運行通常會導(dǎo)致錯誤。 此錯誤是由于文件權(quán)限引起的。 這可以通過首先輸入命令 chmod +x script_name.sh 來解決。 這將添加腳本以具有可執(zhí)行權(quán)限。 然后可以通過鍵入 ./script_name.sh 來運行該腳本。
現(xiàn)在已經(jīng)運行了第一個腳本,真正的問題歸結(jié)為在腳本中可以做什么? 可以運行哪些命令和功能? 答案是可以從終端運行或執(zhí)行的任何東西! 腳本可以使用 cd 來更改目錄。 也許腳本需要創(chuàng)建一個目錄并移入其中。 不是問題! 該腳本可以包含 mkdir 命令,然后可以使用 cd 遍歷新目錄。 嵌入式開發(fā)人員甚至可能希望將創(chuàng)建的目錄添加到路徑變量中。 這可以使用導(dǎo)出命令來完成。
為嵌入式系統(tǒng)開發(fā)軟件時,有時可能需要模塊化腳本。也許只需要編譯內(nèi)核,有時需要編譯內(nèi)核,然后鏈接一些外部庫??梢詣?chuàng)建腳本來處理這些單獨的項目,然后創(chuàng)建一個腳本來根據(jù)構(gòu)建需要調(diào)用這些單獨的腳本!這是一個相對直截了當(dāng)?shù)倪^程,它匯集了到目前為止已經(jīng)展示的所有示例。
就像在常規(guī)的計算機程序中一樣,可能需要使用變量來跟蹤數(shù)據(jù)。無論這是字符串還是數(shù)字?jǐn)?shù)據(jù),腳本都可以像標(biāo)準(zhǔn)應(yīng)用程序一樣訪問變量。在腳本環(huán)境中,就像在任何常規(guī)計算機語言中一樣,對變量名也有一些要求。這些規(guī)則與c語言的規(guī)則非常相似。首先,變量必須以字母開頭。其次,變量不能包含空格,而是應(yīng)該使用下劃線來橋接名稱。第三,變量名不應(yīng)該是bash解釋器理解的關(guān)鍵字或保留字。這將導(dǎo)致混亂和不一致或不正確的結(jié)果。最后,變量名不應(yīng)包含任何標(biāo)點符號。遵循這些規(guī)則將確保嵌入式開發(fā)人員享受無bug的腳本編寫體驗。
現(xiàn)在創(chuàng)建一個變量非常簡單。與C #不同,這里沒有類型說明符。在腳本中,可以通過命名變量并將其設(shè)置為一個值來聲明變量。也可以從腳本中訪問系統(tǒng)變量和信息。例如,可以使用$HOSTNAME來訪問計算機主機名。還可以存儲日期和當(dāng)前用戶信息。
有了這些信息,嵌入式開發(fā)人員現(xiàn)在可以對開始自動化軟件開發(fā)過程所需的必要命令有一個基本的了解。雖然這里提供的信息是一個好的開始,但請留意“Shell Scripting 102”,它將詳細(xì)介紹如何控制腳本執(zhí)行流程和接受用戶信息。