我是如何開始踏上 bash 腳本編程之路的?
我前幾天寫了一個腳本。對於一些人來說,這句話聽起來沒什麼了不起的。而對於另一些人來說,這句話意義重大。要知道,我不是一個程序員,而是一個作家。
我需要解決什麼?
我的問題相當簡單:我需要將工程文件進行分類。這些文件可以從一個網站 URL 以 .zip 的格式下載。當我正手工將它們拷貝到我的電腦桌面,並移動到一個已按照我文件分類的需要進行了結構化的目錄時,一位作家同事給我提了建議:「不就是寫個腳本的事嗎?」
我心想:「就寫個腳本?」——說得好像這是世界上最容易做的事情一樣。
Google 是如何解救我的?
同事的問題促使我思考,並且經過思考後,我進行了 Google 搜索。
Linux 上使用的是什麼腳本編程語言?
這是我第一個 Google 搜索的準則。也許很多人心裡會想:「她太笨了!」是的,我很笨。不過,這的確使我走上了一條解決問題的道路。最常見的搜索結果是 Bash 。嗯,我聽說過 Bash 。呃,我要分類的文件中有一個裡面就有 Bash,那無處不在的 #!/bin/bash
。我重新看了下那個文件,我知道它的用途,因為我需要將它分類。
這引導我進行了下一個 Google 搜索。
如何從一個 URL 下載 zip 文件?
那確實是我的基本任務。我有一個帶有 .zip 文件的 URL ,它包含有所有我需要分類的文件,所以我尋求萬能的 Google 的幫助。搜索到的精華內容和其它一些結果引導我使用 Curl 。但最重要的是:我不僅找到了 Curl ,其中一條置頂的搜索結果還展示了一個使用 Curl 去下載並解壓 .zip 文件的 Bash 腳本。這超出了我本來想尋求的答案,但那也使我意識到在 Google 搜索具體的請求可以得到我寫這個腳本需要的信息。所以,在這個收穫的推動下,我寫了最簡單的腳本:
#!/bin/sh
curl http://rather.long.url | tar -xz -C my_directory --strip-components=1
我迫不及待地運行看看。但我發現一個問題: URL 是會變的,根據我要訪問的文件的分組不同而不同。我有新的問題需要解決,這使我進行了下一輪搜索。
參數如何傳遞給 Bash 腳本?
我需要以不同的 URL 和不同的最終目錄來運行此腳本。 Google 向我展示了如何使用 $1
、$2
等等來替換我在命令行中運行腳本時輸入的內容。比如:
bash myscript.sh http://rather.long.url my_directory
這就好多了。一切如我所願,靈活,實用。最重要的是我只要輸入一條簡短的命令就可以節省 30 分鐘無聊的複製、粘貼工作。這個早上的時間花得值得。
然後我發現還有一個問題:我很健忘,並且我知道我幾個月才運行一次這個腳本。這留給我兩個疑問:
- 我要如何記得運行腳本時輸入什麼(URL 先,還是目錄先)?
- 如果我被貨車撞了,其它作家如何知道該怎樣運行我的腳本?
我需要一個使用說明 —— 如果我使用不正確,則腳本會提示。比如:
usage: bash yaml-fetch.sh <'snapshot_url'> <directory>
否則,則直接運行腳本。我的下一個搜索是:
如何在 Bash 腳本里使用 「if/then/else」?
幸運的是,我已經知道編程中 if/then/else
的存在。我只要找出如何使用它的方法。在這個過程中,我也學到了如何在 Bash 腳本里使用 echo
列印。我的最終成果如下:
#!/bin/sh
URL=$1
DIRECTORY=$2
if [ $# -eq 0 ];
then
echo "usage: bash yaml-fetch.sh <'snapshot_url'> <directory>".
else
# 如果目錄不存在則創建它
echo 'create directory'
mkdir $DIRECTORY
# 下載並解壓 yaml 文件
echo 'fetch and untar the yaml files'
curl $URL | tar -xz -C $DIRECTORY --strip-components=1
fi
Google 和腳本編程如何顛覆我的世界?
好吧,這稍微有點誇大,不過現在是 21 世紀,學習新東西(特別是稍微簡單的東西)比以前簡單多了。我所學到的(除了如何寫一個簡短的、自動分類的 Bash 腳本之外)是如果我有疑問,那麼有很大可能性是其它人在之前也有過相同的疑問。當我困惑時,我可以問下一個問題,再下一個問題。最後,我不僅擁有了腳本,還擁有了可以一直擁有並可以簡化其它任務的新技能,這是我之前所沒有的。
別止步於第一個腳本(或者編程的第一步)。這是一個技能,和其它的技能並無不同,有大量的信息可以在這一路上幫助你。你無需閱讀大量的書或參加一個月的課程。你可以像嬰兒學步那樣簡單地開始寫腳本,然後掌握技能並建立自信。人們總有寫成千上萬行代碼的需求,並對它進行分支、合併、修復錯誤。但是,通過簡單的腳本或其它方式來自動化、簡單化任務的需求也一樣強烈。這樣的一個小腳本和小小的自信就能夠讓你啟程腳本編程之路。
(題圖: opensource.com)
作者簡介:
Sandra McCann 是一位 Linux 和開源技術的倡導者。她是一位軟體開發者、學習資源內容架構師、內容創作者。桑德拉目前是位於韋斯特福德馬薩諸塞州的紅帽公司的內容創作者,專註於 OpenStack 和 NFV 技術。
via: https://opensource.com/article/17/5/how-i-learned-bash-scripting
作者:Sandra McCann 譯者:xllc 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive