Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1484034
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-08-19 11:15:18

前几天在写一个脚本, 每偶数个小时去服务器上去拉去一个按时间戳命名的文件:
 
HOUR_NOW="`date +%H`"
[ $((HOUR_NOW%2)) -eq 0 ] && HOUR_AGO=2 || HOUR_AGO=3
[ $# -gt 0 ] && TIME_STAMP=$1 || TIME_STAMP="`date -d "${HOUR_AGO} hours ago" +"%Y%m%d%H"`"  # 增加支持手工导入 时间格式为YYMMDDHH
date -d "${TIME_STAMP:0:8} ${TIME_STAMP:8:2}"  &>/dev/null || { echo "date format error, exit..."; exit 23; }  # 判断时间格式
 
但是脚本运行一天, 发现少了6点的数据, 看了脚本的运行日志, 发现这个错误: -bash: 08: value too great for base (error token is "08");  在网上搜了一下, date +%H产生的小时是类似01 02 ... 10 .... 23这样子的, 默认情况下, 不够2位的前面补零, 而$(())在做数学运算的时候, 把0开头的数字认为是8进制的, 所以$((08)), 就报了”value too great for base“这样的错误。
 
再查了一下date的手册, 发现:
-      (hyphen) do not pad the field
_      (underscore) pad with spaces
0      (zero) pad with zeros
 
所以, 使用 date +%-H 就可以产生 0 1 2 3 ... 12... 23 这样的输出, 而不是默认位数不是2位默认前面补零的输出格式...  修改 HOUR_NOW="`date +%H`" 为 HOUR_NOW="`date +%-H`" 即可得到解决
阅读(2054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~