Linux中國

通過編寫互動遊戲學習 Bash

學習一門新的編程語言是很有趣的。每當我嘗試學習一門新的語言時,我都會專註於定義變數、編寫語句和評估表達式。一旦我對這些概念有了大致的了解,我通常可以自己弄清楚其餘的概念。大多數編程語言都有一些相似之處,所以一旦你了解了一種編程語言,學習下一種編程語言就是要弄清楚其獨特的細節,認識到其中的差異。

為了幫助我練習一種新的編程語言,我喜歡寫一些測試程序。我經常寫的一個示常式序是一個簡單的「猜數字」程序,電腦在 1 到 100 之間選一個數字,讓我猜這個數字。程序會一直循環,直到我猜對為止。

「猜數字」程序鍛煉了編程語言中的幾個概念:如何給變數賦值,如何寫語句,如何進行條件判斷和循環。對於學習一門新的編程語言來說,這是一個很好的實踐實驗。

Bash 猜數字

Bash 是大多數 Linux 系統的標準 shell。除了提供豐富的命令行用戶界面外,Bash 還以腳本的形式支持完整的編程語言。

如果你對 Bash 不熟悉,我推薦你看這些介紹:

你可以通過編寫一個 Bash 版本的「猜數字」遊戲來探索它。這是我的實現:

#!/bin/bash

number=$(( $RANDOM % 100 + 1 ))

echo "Guess a number between 1 and 100"

guess=0

while [ "0$guess" -ne $number ] ; do
        read guess
        [ "0$guess" -lt $number ] && echo "Too low"
        [ "0$guess" -gt $number ] && echo "Too high"
done

echo "That's right!"
exit 0

拆解這個腳本

腳本中的第一行,#!/bin/bash 告訴 Linux 使用 Bash shell 來運行這個腳本。每個腳本都以 #! 字元對(LCTT 譯註:釋伴)開始,這表示它是一個 shell 腳本。緊跟在#! 後面的是要運行的 shell。在本例中,/bin/bash 是指 Bash shell。

要給一個變數賦值,在變數名後面列出 = 號。例如,語句 guess=0guess 變數分配一個零值。

你也可以使用 read 語句提示用戶輸入一個值。如果你寫了 read guess 語句,Bash 會等待用戶輸入一些文本,然後把這個值存儲在 guess 變數中。

要引用一個變數的值,在變數名前使用 $。所以, 在 guess 變數中存儲了一個值後, 你可以使用 $guess 來檢索它。

你可以使用任何你喜歡的變數名稱,但是 Bash 為自己保留了一些特殊的變數名稱。一個特殊的變數是 RANDOM,每次引用它都會產生一個很大的隨機數。

如果你想在存儲一個值的同時執行一個操作,你需要用特殊的括弧把語句括起來。這將告訴 Bash 先執行該語句,而 = 則將結果值存儲在變數中。要評估一個數學表達式,使用 $(()) 圍在你的語句上。雙括弧表示一個算術表達式。在我的例子中,number=$(( $RANDOM % 100 + 1 )) 評估表達式 $RANDOM % 100 + 1,然後將值存儲在 number 變數中。

標準的算術運算符,如 +(加)、-(減)、*(乘)、/(除)和 %(模)都適用。

這意味著語句 number=$(( $RANDOM % 100 + 1 )) 產生一個 1 到 100 之間的隨機數。模數運算符(%)返回兩個數相除後的餘數。在這種情況下,Bash 將一個隨機數除以 100,剩下的餘數範圍是 0 到 99,通過在這個值上加 1,你可以得到一個介於 1 和 100 之間的隨機數。

Bash 支持像循環這樣的條件表達式流程式控制制。在「猜數字」的遊戲中,只要 guess 中的值不等於 number,Bash 就會繼續循環。如果猜的數小於隨機數,Bash 就會列印「太低」,如果猜的數大於數字,Bash 就會列印「太高」。

它是如何工作的

現在你已經寫好了你的 Bash 腳本,你可以運行它來玩「猜數字」遊戲。一直猜,直到你找到正確的數字:

Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!

每次運行這個腳本,Bash 都會隨機選擇一個不同的數字。

這個「猜數字」遊戲是學習新的編程語言時的一個很好的入門程序,因為它以一種很直接的方式鍛煉了幾個常見的編程概念。通過在不同的編程語言中實現這個簡單的遊戲,你可以展示一些核心概念,並比較每種語言的細節。

你有喜歡的編程語言嗎?你會如何用它來寫「猜數字」遊戲呢?請關注本系列文章,看看你可能感興趣的其他編程語言的例子。

via: https://opensource.com/article/20/12/learn-bash

作者:Jim Hall 選題:lujun9972 譯者:wxy 校對: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中國