当前位置: 首页 > news >正文

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]+$ ]]

相关文章:

  • 备案 网站服务内容杭州网站优化体验
  • 临沂网站建设技术托管湖人今日排名最新
  • 广元网站建设价格seo优化的搜索排名影响因素主要有
  • 国外网站模版免费下载/百度指数平台官网
  • 禹城建设局网站/公司怎么在网上推广
  • 做网站优化的教程/免费卖货平台
  • C语言数组介绍 -- 一维数组和二维数组的创建、初始化、下标、遍历、存储,C99 变长数组
  • Zynq + FreeRTOS + YAFFS2 + SQLite3 集成指南
  • python计算长方形的周长 2025年3月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析
  • Vibe Coding - 使用cursor从PRD到TASK精准分解执行
  • 《内心强大不怯场》读书笔记3
  • 智能营销系统对企业的应用价值
  • 【Java面试】你是怎么控制缓存的更新?
  • Linux内核网络栈的智慧:skb->cb控制缓冲区的设计哲学
  • sudo安装pip包的影响
  • 有哪些词编码模型
  • 相机标定与3D重建技术通俗讲解
  • Python基础(​​FAISS​和​​Chroma​)
  • 每日算法刷题Day36 6.23:leetcode枚举技巧枚举中间4道题,用时1h30min
  • VLN论文复现——VLFM(ICRA最佳论文)
  • 【图像】ubuntu中图像处理
  • 可编辑精品PPT | 企业数字化商业平台客户中台解决方案客户CRM数据中台方案
  • 支持java8的kafka版本
  • 73页精品PPT | 大数据平台规划与数据价值挖掘应用咨询项目解决方案
  • 【Docker基础】Docker容器管理:docker pause详解
  • 龙虎榜——20250623