🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- Shell脚本中的日期变量详解
- 📅 基础用法示例
- 🌟 扩展日期格式
- ⚠️ 注意事项
- 🔧 完整脚本示例
- 🚨 常见错误
- 🔍 调试技巧
- 💡 高级用法
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
Shell脚本中的日期变量详解
在 Shell 脚本中使用日期变量时,通常需要结合 date
命令动态生成时间戳。以下是常见用法和注意事项:
📅 基础用法示例
#!/bin/sh# 定义日期变量(格式示例:20240327)
TODAY=$(date +%Y%m%d)# 构建 Docker 镜像时使用日期标签
docker build -t sb_back:$TODAY .
🌟 扩展日期格式
根据需求调整 date
的格式参数:
# 带时间的格式(示例:20240327_153045)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)# 人类可读格式(示例:2024-03-27)
HUMAN_DATE=$(date +%F)# 其他自定义格式(示例:27Mar2024)
CUSTOM_DATE=$(date +%d%b%Y)
⚠️ 注意事项
-
Shell 环境差异:
- 如果使用
#!/bin/sh
,确保date
命令支持你的格式(BSD 和 GNUdate
可能有差异)。 - 如需复杂操作,建议改用
#!/bin/bash
。
- 如果使用
-
Docker 标签合法性:
- Docker 标签只能包含小写字母、数字、下划线、
.
和-
,不能包含空格或特殊字符(如:
在标签中本身就是分隔符)。
- Docker 标签只能包含小写字母、数字、下划线、
-
时区问题:
- 默认使用系统时区,如需指定时区:
# 使用 UTC 时区(需 GNU date) UTC_DATE=$(date -u +%Y%m%d)
- 默认使用系统时区,如需指定时区:
🔧 完整脚本示例
#!/bin/sh# 生成日期变量
IMAGE_TAG=$(date +%Y%m%d_%H%M%S)# 构建镜像
docker build -t sb_back:$IMAGE_TAG .# 可选:同时标记为 latest
docker tag sb_back:$IMAGE_TAG sb_back:latest
🚨 常见错误
-
语法错误:
# 错误:漏掉 $ 符号或命令替换符 TODAY=date +%Y%m%d # ❌ TODAY=$(date +%Y%m%d) # ✅
-
格式冲突:
# 错误:空格未用引号包裹 docker tag sb_back:$(date +%c) # ❌ 若日期含空格会报错 docker tag sb_back:"$(date +%c)" # ✅ 用引号包裹
🔍 调试技巧
-
先打印变量值:
echo "当前标签:$IMAGE_TAG" docker build -t sb_back:$IMAGE_TAG .
-
检查命令展开:
# 直接替换变量查看最终命令 set -x # 开启调试模式 docker build -t sb_back:$IMAGE_TAG . set +x # 关闭调试模式
💡 高级用法
如果需要动态计算日期(如昨天、明天):
# GNU date 用法(Linux 系统)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
TOMORROW=$(date -d "tomorrow" +%Y%m%d)# BSD date 用法(macOS 系统)
YESTERDAY=$(date -v-1d +%Y%m%d)
TOMORROW=$(date -v+1d +%Y%m%d)
通过合理使用日期变量,可以让你的脚本更灵活地管理镜像版本! 🚀
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇