Day 2:Shell变量解密——从“Hello World“到会“记忆“的脚本
目录
- 一、变量基础:Shell的"小纸条"
- 1. 变量定义与使用
- 2. 变量命名规则
- 二、变量类型:Shell的"记忆分类术"
- 1. 局部变量 vs 环境变量
- 2. 特殊变量(Shell内置记忆)
- 三、实战:打造你的第一个"智能脚本"
- 1. 用户信息收集器
- 2. 参数传递实战
- 四、避坑指南:变量使用的"七宗罪"
- 五、扩展技能:让变量更强大
- 1. 默认值设置
- 2. 变量长度计算
- 3. 企业级技巧:变量类型声明
- 课后挑战赛
开篇:为什么你的脚本需要"记忆力"?
想象你在写日记:
- 普通脚本:每天手动输入"今天是2023年X月X日"
- 有变量的脚本:自动记住日期,还能计算你的年龄
这就是变量的魔力!今天我们要把脚本变成会"记忆"的智能助手,让你体验代码界的记忆面包(哆啦A梦直呼内行!)
一、变量基础:Shell的"小纸条"
1. 变量定义与使用
# 定义变量(等号两边不能有空格!)
name="Shell萌新"
days=14# 使用变量
echo "欢迎你,$name!"
echo "这是${days}天训练营的第2天" # 大括号推荐写法
💡 趣味实验:试试带空格的赋值name = “测试”,观察报错信息
2. 变量命名规则
- ✅ 允许:user_name、_count、var1
- ❌ 禁止:1var、user-name、for(关键字)
冷知识:$PATH
和$path
在Bash中是不同变量(区分大小写!)
二、变量类型:Shell的"记忆分类术"
1. 局部变量 vs 环境变量
# 局部变量(仅在当前Shell有效)
local_var="我是临时工"# 环境变量(子进程也能继承)
export GLOBAL_VAR="我是正式工"
验证实验:
bash -c 'echo $local_var' # 输出空
bash -c 'echo $GLOBAL_VAR' # 输出"我是正式工"
2. 特殊变量(Shell内置记忆)
变量 | 含义 | 示例 |
---|---|---|
$0 | 当前脚本名 | echo “我在运行:$0” |
$# | 参数个数 | echo “收到$#个参数” |
$* | 所有参数(作为一个字符串) | 见下方实战 |
三、实战:打造你的第一个"智能脚本"
1. 用户信息收集器
#!/bin/bashecho "🛎️ 您好,我是智能助理小B"
read -p "请输入您的名字:" username
read -p "请输入您的年龄:" agefuture_age=$((age + 5)) # 算术运算演示cat <<EOF
========================
用户档案生成中...
姓名:$username
当前年龄:$age
5年后您将:$future_age岁
========================
EOF
运行效果:
🛎️ 您好,我是智能助理小B
请输入您的名字:Tony
请输入您的年龄:28
========================
用户档案生成中...
姓名:Tony
当前年龄:28
5年后您将:33岁
========================
2. 参数传递实战
#!/bin/bash
# 保存为greet.shecho "第一个参数:$1"
echo "第二个参数:$2"
echo "所有参数:$*"
echo "参数总数:$#"
玩法示例:
./greet.sh 早上好 "Shell 同学"
# 输出:
# 第一个参数:早上好
# 第二个参数:Shell 同学
# 所有参数:早上好 Shell 同学
# 参数总数:2
四、避坑指南:变量使用的"七宗罪"
- 空格刺客:
var = value
(等号两边不能有空格) - 字符串陷阱:
num=10+20
实际是字符串"10+20" - 全局污染:忘记
local
声明函数内变量 - 未初始化:使用未定义变量(建议
set -u
) - 引号谜团:双引号 vs 单引号的区别:
name="World"
echo "Hello $name" # 输出 Hello World
echo 'Hello $name' # 输出 Hello $name
五、扩展技能:让变量更强大
1. 默认值设置
# 如果name不存在则使用默认值
echo "欢迎,${name:-游客}"
2. 变量长度计算
password="abc123"
echo "密码长度:${#password}" # 输出6
3. 企业级技巧:变量类型声明
declare -i number=10 # 声明为整数
declare -r PI=3.14 # 声明为只读
课后挑战赛
任务:编写升级版计算器脚本
- ✅ 通过参数接收两个数字
- ✅ 自动计算加减乘除结果
- ✅ 检查参数是否为空并给出友好提示
示例效果:
./calc.sh 8 2
加法结果:10
减法结果:6
...
隐藏成就:
如果用户输入非数字参数,脚本会"优雅地生气"(提示:用[[ $1 =~ ^[0-9]+$ ]]
)