前几天在写一个脚本, 每偶数个小时去服务器上去拉去一个按时间戳命名的文件:
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) |