通過編寫互動(dòng)游戲?qū)W習(xí) Bash
編程一個(gè)簡(jiǎn)單的游戲是練習(xí)一門新語言并與其他你掌握的語言進(jìn)行比較的好方法。
學(xué)習(xí)一門新的編程語言是很有趣的。每當(dāng)我嘗試學(xué)習(xí)一門新的語言時(shí),我都會(huì)專注于定義變量、編寫語句和評(píng)估表達(dá)式。一旦我對(duì)這些概念有了大致的了解,我通??梢宰约号宄溆嗟母拍?。大多數(shù)編程語言都有一些相似之處,所以一旦你了解了一種編程語言,學(xué)習(xí)下一種編程語言就是要弄清楚其獨(dú)特的細(xì)節(jié),認(rèn)識(shí)到其中的差異。
為了幫助我練習(xí)一種新的編程語言,我喜歡寫一些測(cè)試程序。我經(jīng)常寫的一個(gè)示例程序是一個(gè)簡(jiǎn)單的“猜數(shù)字”程序,電腦在 1 到 100 之間選一個(gè)數(shù)字,讓我猜這個(gè)數(shù)字。程序會(huì)一直循環(huán),直到我猜對(duì)為止。
“猜數(shù)字”程序鍛煉了編程語言中的幾個(gè)概念:如何給變量賦值,如何寫語句,如何進(jìn)行條件判斷和循環(huán)。對(duì)于學(xué)習(xí)一門新的編程語言來說,這是一個(gè)很好的實(shí)踐實(shí)驗(yàn)。
用 Bash 猜數(shù)字
Bash 是大多數(shù) Linux 系統(tǒng)的標(biāo)準(zhǔn) shell。除了提供豐富的命令行用戶界面外,Bash 還以腳本的形式支持完整的編程語言。
如果你對(duì) Bash 不熟悉,我推薦你看這些介紹:
你可以通過編寫一個(gè) Bash 版本的“猜數(shù)字”游戲來探索它。這是我的實(shí)現(xiàn):
#!/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
拆解這個(gè)腳本
腳本中的第一行,#!/bin/bash
告訴 Linux 使用 Bash shell 來運(yùn)行這個(gè)腳本。每個(gè)腳本都以 #!
字符對(duì)(LCTT 譯注:釋伴)開始,這表示它是一個(gè) shell 腳本。緊跟在#!
后面的是要運(yùn)行的 shell。在本例中,/bin/bash
是指 Bash shell。
要給一個(gè)變量賦值,在變量名后面列出 =
號(hào)。例如,語句 guess=0
給 guess
變量分配一個(gè)零值。
你也可以使用 read
語句提示用戶輸入一個(gè)值。如果你寫了 read guess
語句,Bash 會(huì)等待用戶輸入一些文本,然后把這個(gè)值存儲(chǔ)在 guess
變量中。
要引用一個(gè)變量的值,在變量名前使用 $
。所以, 在 guess
變量中存儲(chǔ)了一個(gè)值后, 你可以使用 $guess
來檢索它。
你可以使用任何你喜歡的變量名稱,但是 Bash 為自己保留了一些特殊的變量名稱。一個(gè)特殊的變量是 RANDOM
,每次引用它都會(huì)產(chǎn)生一個(gè)很大的隨機(jī)數(shù)。
如果你想在存儲(chǔ)一個(gè)值的同時(shí)執(zhí)行一個(gè)操作,你需要用特殊的括號(hào)把語句括起來。這將告訴 Bash 先執(zhí)行該語句,而 =
則將結(jié)果值存儲(chǔ)在變量中。要評(píng)估一個(gè)數(shù)學(xué)表達(dá)式,使用 $(())
圍在你的語句上。雙括號(hào)表示一個(gè)算術(shù)表達(dá)式。在我的例子中,number=$(( $RANDOM % 100 + 1 ))
評(píng)估表達(dá)式 $RANDOM % 100 + 1
,然后將值存儲(chǔ)在 number
變量中。
標(biāo)準(zhǔn)的算術(shù)運(yùn)算符,如 +
(加)、-
(減)、*
(乘)、/
(除)和 %
(模)都適用。
這意味著語句 number=$(( $RANDOM % 100 + 1 ))
產(chǎn)生一個(gè) 1 到 100 之間的隨機(jī)數(shù)。模數(shù)運(yùn)算符(%
)返回兩個(gè)數(shù)相除后的余數(shù)。在這種情況下,Bash 將一個(gè)隨機(jī)數(shù)除以 100,剩下的余數(shù)范圍是 0 到 99,通過在這個(gè)值上加 1,你可以得到一個(gè)介于 1 和 100 之間的隨機(jī)數(shù)。
Bash 支持像循環(huán)這樣的條件表達(dá)式和流程控制。在“猜數(shù)字”的游戲中,只要 guess
中的值不等于 number
,Bash 就會(huì)繼續(xù)循環(huán)。如果猜的數(shù)小于隨機(jī)數(shù),Bash 就會(huì)打印“太低”,如果猜的數(shù)大于數(shù)字,Bash 就會(huì)打印“太高”。
它是如何工作的
現(xiàn)在你已經(jīng)寫好了你的 Bash 腳本,你可以運(yùn)行它來玩“猜數(shù)字”游戲。一直猜,直到你找到正確的數(shù)字:
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!
每次運(yùn)行這個(gè)腳本,Bash 都會(huì)隨機(jī)選擇一個(gè)不同的數(shù)字。
這個(gè)“猜數(shù)字”游戲是學(xué)習(xí)新的編程語言時(shí)的一個(gè)很好的入門程序,因?yàn)樗砸环N很直接的方式鍛煉了幾個(gè)常見的編程概念。通過在不同的編程語言中實(shí)現(xiàn)這個(gè)簡(jiǎn)單的游戲,你可以展示一些核心概念,并比較每種語言的細(xì)節(jié)。
你有喜歡的編程語言嗎?你會(huì)如何用它來寫“猜數(shù)字”游戲呢?請(qǐng)關(guān)注本系列文章,看看你可能感興趣的其他編程語言的例子。