我是如何開始踏上 bash 腳本編程之路的?
人們總有寫成千上萬行代碼的需求,並對它進行分支、合并、修復錯誤。但是,通過簡單的腳本或其它方式來自動化、簡單化任務的需求也一樣強烈。這樣的一個小腳本和小小的自信就能夠讓你啟程腳本編程之路。 -- Sandra Mccann
本文導航
-我需要解決什麼? …… 08%
-Google 是如何解救我的? …… 16%
-Google 和腳本編程如何顛覆我的世界? …… 70%
編譯自: https://opensource.com/article/17/5/how-i-learned-bash-scripting
作者: Sandra Mccann
譯者: xllc
通過一些簡單的 Google 搜索,即使是編程入門者也可以嘗試編寫代碼將以往枯燥和冗長的任務自動化。
我前幾天寫了一個腳本。對於一些人來說,這句話聽起來沒什麼了不起的。而對於另一些人來說,這句話意義重大。要知道,我不是一個程序員,而是一個作家。
我需要解決什麼?
我的問題相當簡單:我需要將工程文件進行分類。這些文件可以從一個網站 URL 以 .zip 的格式下載。當我正手工將它們拷貝到我的電腦桌面,並移動到一個已按照我文件分類的需要進行了結構化的目錄時,一位作家同事給我提了建議:「不就是寫個腳本的事嗎?」
我心想:「就寫個腳本?」——說得好像這是世界上最容易做的事情一樣。
Google 是如何解救我的?
同事的問題促使我思考,並且經過思考後,我進行了 Google 搜索。
Linux 上使用的是什麼腳本編程語言?
這是我第一個 Google 搜索的準則。也許很多人心裡會想:「她太笨了!」是的,我很笨。不過,這的確使我走上了一條解決問題的道路。最常見的搜索結果是 Bash 。嗯,我聽說過 Bash 。呃,我要分類的文件中有一個裡面就有 Bash,那無處不在的 #!/bin/bash 。我重新看了下那個文件,我知道它的用途,因為我需要將它分類。
這引導我進行了下一個 Google 搜索。
如何從一個 URL 下載 zip 文件?
那確實是我的基本任務。我有一個帶有 .zip 文件的 URL ,它包含有所有我需要分類的文件,所以我尋求萬能的 Google 的幫助。搜索到的精華內容和其它一些結果引導我使用 Curl 。但最重要的是:我不僅找到了 Curl ,其中一條置頂的搜索結果還展示了一個使用 Curl 去下載並解壓 .zip 文件的 Bash 腳本。這超出了我本來想尋求的答案,但那也使我意識到在 Google 搜索具體的請求可以得到我寫這個腳本需要的信息。所以,在這個收穫的推動下,我寫了最簡單的腳本:
#!/bin/shcurl 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">
否則,則直接運行腳本。我的下一個搜索是:
如何在 Bash 腳本里使用 「if/then/else」?
幸運的是,我已經知道編程中 if/then/else 的存在。我只要找出如何使用它的方法。在這個過程中,我也學到了如何在 Bash 腳本里使用 echo 列印。我的最終成果如下:
#!/bin/shURL=$1
DIRECTORY=$2
if [ $# -eq 0 ];
then
echo "usage: bash yaml-fetch.sh <"snapshot_url">
". 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[1] 譯者:xllc 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
[1]: Sandra McCann - https://opensource.com/users/sandra-mccann
※Debian GNU/Linux 9 「Stretch」 正式發布
※嘿!獲得新成就!論一次與 LinuxCon 的近距離邂逅!
※極客漫畫:一篇關於 PHP 的優點的漫畫
※Linux GRUB2 配置簡介
※教職人員是否可以運用維基百科教學?
TAG:Linux技術 |
※星爺看中的人,曾是星女郎,但是現在卻踏上cos之路一去不回!
※「Fashion Acoustic此時此聲」 邀你踏上一場關於時裝與音樂的旅程
※與Paul Smith一起踏上一場幻夢旅程
※6位踏上演員之路的「Produce」出身愛豆
※踏上一個人的旅程 用iPhone 走天下
※與 Shame 共同踏上他們「乏味」的巡演之旅
※周年新版本,全職業覺醒變strong!與「復仇者」一起踏上全新冒險之旅
※iOS 12來了:你的舊 iPhone 也能踏上這艘新船
※那夜天無暗月星辰無光,我扛著一捆麻繩踏上了一條死與生的邊緣路
※滄海桑田 谷歌更新Timelapse 帶你踏上時光倒流之旅
※搞笑GIF趣圖:一朝學會狗攆兔,從此踏上不歸路!
※純電動賓士Sprinter踏上了保姆車的不歸路
※《Sable》:踏上飛行摩托去遠方探索遺迹
※春運已經開始,你踏上返鄉途了嗎?
※球鞋「踩屎感」哪家強?耐克和安踏上榜,第一併非阿迪boost
※他們本應該是動漫中「小天使」般的存在,卻無奈踏上了修羅的道路
※Day 1∣踏上旅程
※炎炎夏日,跟隨Junaida踏上夢幻王國的旅行
※紫砂,你還記得自己是因為什麼踏上玩壺之路的嗎?
※陸塵本是一個被判定無法修鍊的廢材,因為觸發一枚乾坤魂印,從此踏上了至高無上的修真之路