前言
作为 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 进阶功能,持续提升脚本开发能力!