通过编写互动游戏学习 Bash
创始人
2024-03-02 06:14:39
0

编程一个简单的游戏是练习一门新语言并与其他你掌握的语言进行比较的好方法。

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

为了帮助我练习一种新的编程语言,我喜欢写一些测试程序。我经常写的一个示例程序是一个简单的“猜数字”程序,电脑在 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中国 荣誉推出

相关内容

原创 ...
《绊爱 AI:悦动音符!》Switch NSP,准备好沉浸在令人心...
2026-05-25 04:39:57
网易2026Q1财报公布:...
快科技5月21日消息,今日,网易发布2026年第一季度财报,净收入...
2026-05-21 23:10:41
李飞飞做AI游戏,拿了4个...
李飞飞又拿到钱了。5600万美元。 不是做世界模型的World L...
2026-05-09 16:14:24
人机博弈背后的战略推理:推...
Gabriele Farina成长于意大利北部一个盛产葡萄酒的丘陵...
2026-05-09 10:35:22
“AI+游戏”叙事空间有多...
2025年以来,AI成为企业财报中的高频词,“AI+游戏”的叙事似...
2026-05-07 12:27:32
当AI成为你的Game J...
边界 “我正在骂AI。”热水指着电脑对我说。 这是4月26日在深圳...
2026-05-06 20:25:46

热门资讯

为什么计量 IT 的生产力如此... 在某些行业里,人们可以根据一些测量标准判定一个人的生产力。比如,如果你是一个零件制造商,可以通过一个...
硬核观察 #885 苹果 AR... 苹果 AR 眼镜被无限期推迟据报道,由于技术上的挑战,苹果公司已经无限期推迟了其轻型增强现实(AR)...
8 个提升你的隐私防护的开源密... 使用一些顶级开源密码管理器,确保你的登录凭证安全无虞。密码管理器是一项非常有用的实用程序。在你想寻找...
PHP最佳实践(译) 简介PHP是一门复杂的语言,经过多年折腾,使其不同版本之间高度不一致,有时还有些bug。 每个版本都...
8个有趣的Linux提示与技巧... 我们时不时给你带来关于Linux的提示与技巧。和这个系列保持一致,这里有8个我们从读者收到最有趣的提...
值得收藏的 27 个机器学习的... 机器学习 ( Machine Learning ) 有很多方面,当我开始研究学习它时,我发现了各种各...
Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
2020 年的 GitHub ... 距离 2020 年结束只剩下区区 24 天,我们即将结束魔幻的 2020 ,迎来新的一年,新的一年或...
开源新闻速递:openSUSE... 今日关注openSUSE 项目组的 Dominique Leuenberger 在他的周报中说:“这...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...