news 2025/12/25 21:55:05

Linux Shell 脚本入门实战:猜数字游戏开发(核心知识点总结)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux Shell 脚本入门实战:猜数字游戏开发(核心知识点总结)

前言

作为 Linux Shell 脚本初学者,近期通过实战开发猜数字游戏,系统掌握了脚本基础核心语法,彻底理清了变量操作、流程控制等关键知识点。本文将结合完整的游戏脚本,逐一拆解学习收获,从基础语法到实战落地,一步步带你搞定 Shell 入门核心内容,适合零基础同学参考学习。

一、学习收获与核心知识点

本次学习重点掌握 5 大核心内容,全部结合猜数字游戏实战落地,语法简单易懂、直接可复用,具体如下:

1. 变量的创建、赋值与读取

Shell 脚本中变量无需提前声明数据类型,直接赋值即可使用,核心规则简单好记,是脚本开发的基础。

- 创建与赋值:语法为 变量名=值 ,核心注意点是 = 前后不能加空格,否则会被 Shell 识别为命令,导致报错。

- 变量读取:引用变量时需加 $ 符号,语法为 $变量名 ,用于获取变量存储的值并使用。

- 读取用户输入:通过 read 变量名 命令实现,可接收用户在终端的输入内容,并自动赋值给指定变量,实现脚本与用户的交互。

实战代码片段:

bash

# 1. 创建并赋值变量(欢迎语变量)

welcome="Welcome to channel"

# 2. 读取变量并输出

echo $welcome

# 3. 读取用户输入(接收用户猜测的数字)

echo "Please enter a number"

read guess # 将用户输入赋值给 guess 变量

2. 随机数的表示方法

开发猜数字游戏,核心是让系统生成随机整数,Linux 中无需额外安装工具,使用 shuf 命令即可快速实现,语法简洁、实用性强。

- 核心语法: shuf -i 起始值-结束值 -n 1 ,其中 -i 指定随机数生成区间, -n 1 表示只生成 1 个随机数。

- 实战应用:将随机数生成结果赋值给变量,后续用于猜数字对比逻辑,示例如下:

bash

# 生成 1-10 之间的 1 个随机数,赋值给 number 变量

number=$(shuf -i 1-10 -n 1)

# 测试用:读取并打印随机数(正式玩可注释)

echo $number

3. if 条件判断语句

if 语句是 Shell 脚本实现分支逻辑的核心,支持单分支、多分支判断,可根据不同条件执行对应代码,满足脚本复杂逻辑需求。

- 核心语法:

- 单分支: if [ 条件表达式 ]; then 执行命令; fi

- 多分支: if [ 条件1 ]; then 命令1; elif [ 条件2 ]; then 命令2; else 命令3; fi

- 关键注意点:条件表达式外层的 [] 或 [[]] 前后必须加空格,否则语法解析失败;多分支判断需用 elif 衔接,最终用 fi 闭合,避免结构不完整报错。

实战代码片段(猜数字判断逻辑):

bash

# 多分支判断:对比用户猜测数字与系统随机数

if [[ $guess -eq $number ]]; then

echo "you are right,choose to continue or break(Y or N)"

elif [[ $guess -lt $number ]]; then

echo "it is smaller than the right number"

else

echo "it is bigger than the right number"

fi

4. 循环语句的使用

循环语句可实现代码重复执行,本次实战采用 while true 实现无限循环,让游戏持续运行,配合 continue 和 break 灵活控制循环流程。

- 核心语法: while true; do 循环体代码; done , while true 表示循环条件永久为真,实现无限循环。

- 流程控制补充:

- continue :跳过当前循环剩余代码,直接进入下一次循环,比如用户输入非数字时,跳过后续判断,重新让用户输入。

- break :跳出当前所在的循环,结束循环执行,比如用户选择退出游戏时,跳出无限循环,终止脚本。

实战代码片段(游戏主循环):

bash

# 游戏无限循环,持续运行直到用户选择退出

while true

do

# 循环体:用户输入、条件判断等核心逻辑

echo "Please enter a number"

read guess

# 非数字输入处理,跳过后续逻辑,重新循环

if ! [[ $guess =~ ^[0-9]+$ ]]; then

echo "Error!Please enter a valid number"

continue

fi

# 退出逻辑,跳出循环

elif [[ $choice = 'n' ]] || [[ $choice = 'N' ]]; then

echo "Game over!"

break

fi

done

5. 字符比较用 =

Shell 中字符(字符串)的等于判断,核心使用 = 运算符(与 == 功能等价),主要用于判断用户输入的字符型内容,比如游戏中用户选择的 Y/N。

- 核心语法: [ 字符串1 = 字符串2 ] 或 [[ 字符串1 = 字符串2 ]] ,前后必须加空格,保证语法合法。

- 实战应用:结合逻辑或 || 实现多字符匹配,比如同时判断用户输入的是小写 y 还是大写 Y,执行相同逻辑。

实战代码片段(用户选择判断):

bash

# 字符比较:判断用户是否选择继续游戏

read choice

if [[ $choice = 'y' ]] || [[ $choice = 'Y' ]]; then

# 重新生成随机数,继续游戏

number=$(shuf -i 1-10 -n 1)

continue

elif [[ $choice = 'n' ]] || [[ $choice = 'N' ]]; then

# 退出游戏

echo "Game over!"

break

fi

二、完整可运行实战脚本

整合上述所有核心知识点,实现完整的猜数字游戏,代码无语法错误,直接复制即可运行:

bash

#!/bin/bash

# 猜数字游戏 - Shell 基础语法实战

# 1. 变量创建与赋值

welcome="Welcome to channel"

echo $welcome

# 2. 生成 1-10 随机数

number=$(shuf -i 1-10 -n 1)

# 测试用:打印随机数,正式游玩可注释

echo $number

# 3. 循环语句:游戏主循环

while true

do

# 读取用户输入

echo "Please enter a number"

read guess

# 非数字输入校验(补充优化,提升脚本健壮性)

if ! [[ $guess =~ ^[0-9]+$ ]]; then

echo "Error!Please enter a valid number"

continue

fi

# 4. if 条件判断:猜数字核心逻辑

if [[ $guess -eq $number ]]; then

echo "you are right,choose to continue or break(Y or N)"

read choice

# 5. 字符比较:判断用户选择

if [[ $choice = 'y' ]] || [[ $choice = 'Y' ]]; then

# 重新生成随机数,继续游戏

number=$(shuf -i 1-10 -n 1)

echo $number

continue

elif [[ $choice = 'n' ]] || [[ $choice = 'N' ]]; then

echo "Game over!"

break

else

echo "Please enter the right choice!"

fi

elif [[ $guess -lt $number ]]; then

echo "it is smaller than the right number"

else

echo "it is bigger than the right number"

fi

done

三、脚本运行步骤

1. 创建脚本文件:打开 Linux 终端,输入 vim game.sh ,进入文本编辑模式;

2. 粘贴代码并保存:将上述完整代码复制粘贴到编辑界面,按 Esc 键,输入 :wq 保存并退出;

3. 赋予执行权限:输入 chmod u+x game.sh ,为脚本添加用户执行权限;

4. 运行脚本:输入 bash game.sh 或 ./game.sh ,即可启动猜数字游戏。

四、避坑小技巧

1. 变量赋值时, = 前后绝对不能加空格,这是初学者最容易踩的坑,比如 number = 5 会直接报错;

2. 条件判断中, [] / [[]] 前后必须加空格,字符比较、数值比较的运算符不能混用;

3. 字符比较用 = ,数值比较用 -eq (等于)、 -lt (小于)、 -gt (大于),避免语法混淆;

4. if 语句、循环语句必须闭合完整, if 对应 fi , while 对应 done ,缺失会导致脚本解析失败。

五、总结

本次通过猜数字游戏实战,成功掌握了 Shell 脚本 5 大核心知识点,从变量操作到流程控制,实现了从语法学习到实战落地的转化。Shell 脚本核心是简洁高效,掌握基础语法后,通过多实战、多练习,就能逐步实现自动化操作、批量处理等更复杂的需求。后续将继续深化学习,探索更多 Shell 进阶功能,持续提升脚本开发能力!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/14 17:56:39

测试可编程运放 MCP6S21

使用MCP6S22检测导航信号特性测试 **AD\Test\2025\December\TestMCP6S21STG8SOP8.SchDoc *** 增益可编程放大器MCP6S2101 MCP6S21测试特性 一、背景简介 之前测试了增益可编程运放 MCP6S22,  现在购买的 MCP6S21 芯片到货了, 它内部运放具有信号参考地…

作者头像 李华
网站建设 2025/12/23 4:18:19

月周日虚拟成交量通达信指标源码贴图

{}WD:IF(WEEKDAY<5,WEEKDAY,1);{返回周几} WDM:(WEEKDAY-1)*240FROMOPEN;{计算本周的开盘分钟数} CD:DAY; TWD:WEEKDAY; CMD:30; YINZI:7-(CD MOD 7)-TWD; CMW:((CMDYINZI)-1)*5TWD; V1:DAY;{日期} V2:WEEKDAY; V3:V2-(V1-INTPART(V1/7)*7); {取得当日和7以及周几的关连因子…

作者头像 李华
网站建设 2025/12/25 6:51:19

通达信涨停板主图 源码

{}VAR1:EMA(CLOSE,12)-EMA(CLOSE,26); JL01:MA(C,3); LJL07:(3*CLOH)/6; 牛线:(20*LJL0719*REF(LJL07,1)18*REF(LJL07,2)17*REF(LJL07,3)16*REF(LJL07,4)15*REF(LJL07,5)14*REF(LJL07,6)13*REF(LJL07,7)12*REF(LJL07,8)11*REF(LJL07,9)10*REF(LJL07,10)9*REF(LJL07,11)8*REF(LJ…

作者头像 李华
网站建设 2025/12/23 8:32:31

天机学堂-排行榜功能-day08(六)

接口 一 实时排行榜 1.查询赛季列表功能参数说明请求方式GET请求路径/boards/seasons/list请求参数无返回值[ { "id": "110", // 赛季id "name": "第一赛季", // 赛季名称 "beginTime": "2023-05-01", …

作者头像 李华
网站建设 2025/12/19 23:35:22

54、深入解析STREAMS机制:从流头操作到终端控制

深入解析STREAMS机制:从流头操作到终端控制 1. 流头操作:qattach()与qdetach() 当打开一个模块或驱动程序时, qattach() 函数会被调用。其主要作用是为驱动程序或模块设置一个队列对,并调用其 open 函数。 qattach() 的参数之一是一个现有的队列对,新的队列对将链…

作者头像 李华
网站建设 2025/12/14 17:48:57

12、C++ 数据序列化与文件处理实战

C++ 数据序列化与文件处理实战 在 C++ 编程中,数据序列化和文件处理是非常重要的部分。本文将详细介绍如何使用不同的库进行 XML、JSON 数据的序列化和反序列化,以及如何创建包含图像的 PDF 文件和处理 ZIP 归档文件。 1. XML 数据的序列化和反序列化 在 C++ 标准库中,没…

作者头像 李华