Linux中國

我是如何開始踏上 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 <&apos;snapshot_url&apos;> <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 <&apos;snapshot_url&apos;> <directory>".
 else

# 如果目錄不存在則創建它
 echo &apos;create directory&apos;

 mkdir $DIRECTORY

 # 下載並解壓 yaml 文件
 echo &apos;fetch and untar the yaml files&apos;

 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國