????致敬读者
- ????感谢阅读????笑口常开????生日快乐⬛早点睡觉
????博主相关
- ????博主信息????博客首页????专栏推荐????活动信息
文章目录
- 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)
通过合理使用日期变量,可以让你的脚本更灵活地管理镜像版本! ????
????文末寄语
- ????关注我,获取更多内容。
- ????技术动态、实战教程、问题解决方案等内容持续更新中。
- ????《全栈知识库》技社区,集结全栈各领域开发者,期待你的加入。
- ????加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- ????点击下方名片获取更多内容????????????????