通过编写互动游戏学习 Bash

编写一个简单的游戏是练习一门新语言并将其与你已知的其他语言进行比较的好方法。
88 位读者喜欢这篇文章。
bash logo on green background

Opensource.com

学习一门新的编程语言可能很有趣。每当我尝试学习一门新语言时,我都会专注于定义变量、编写语句和评估表达式。一旦我对这些概念有了大致的了解,我通常可以自己弄清楚其余部分。大多数编程语言都有一些相似之处,因此一旦你掌握了一门编程语言,学习下一门语言就变成弄清楚其独特的细节并识别其中的差异。

为了帮助我练习一门新的编程语言,我喜欢编写一些测试程序。我经常编写的一个示例程序是一个简单的“猜数字”程序,计算机选择一个介于 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 运行此脚本。每个脚本都以 #! 字符对开头,这表示这是一个 shell 脚本。紧随 #! 之后的是要运行的 shell。在本例中,/bin/bash 是 Bash shell。

要为变量赋值,请列出变量的名称,后跟 = 符号。例如,语句 guess=0 将零值赋给 guess 变量。

你还可以使用 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 都会选择一个不同的随机数。

当学习一门新的编程语言时,这个“猜数字”游戏是一个很棒的入门程序,因为它以一种非常直接的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,你可以演示一些核心概念并比较每种语言的细节。

你有没有最喜欢的编程语言?你会如何用它编写“猜数字”游戏?关注本系列文章,了解其他可能让你感兴趣的编程语言的示例。

接下来阅读
标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,以其在 GNOME 中的可用性测试以及作为 FreeDOS 的创始人兼项目协调员而闻名。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.