首页 > 其他 > 详细

Shell字符串使用十进制转换

时间:2014-01-24 10:13:42      阅读:544      评论:0      收藏:0      [点我收藏+]

其实不知道该起什么题目。

先说下需求,线上的log是按照五分钟为粒度切分的,即每五分钟产生一个文件,19:04的log写入到

1900结尾的log文件中,19:05写入到1905结尾的log文件中。

在实时分析log的时候,往往需要我们将log的后缀拼接出来,如下是我实现的函数

bubuko.com,布布扣
function GenLogSuffixFromUnixTime() 
{
  local unix_time=$1
  local minute=`date -d @$unix_time +%M`
  minute=$(((10 + minute)%10))
  if [[ $minute -ge 5 ]]; then
    minute=$((minute - 5))
  fi
  unix_time=$(($unix_time - $minute*60))
  local time_str=`date -d @$unix_time +%Y%m%d.%H%M`
  echo $time_str
}
bubuko.com,布布扣

想法很简单

1. 传入一个unixtime,可以为当前的时间,也可以是当前时间的偏移,如一天、五分钟等。

2. 将unixtime转换为minute,将minute转换到0或5的文件上。

3. 新的unixtime时间转换为时间字符串。

在minute=08 09时,会出错,让人不明所以。

后来在同事的提醒下(之前也遇到过类似的情形),是由于Shell解析的时候将01~07当成八进制的数了,

当出现08 09在八进制下不合法的表示时,自然出错了。

知道原因了,解决方案是将高亮的代码语句替换为如下

minute=$(((10 + 10#$minute)%10))

minute前面的10表示作为十进制数。

希望写出来对大家有用

Shell字符串使用十进制转换

原文:http://www.cnblogs.com/westfly/p/3531824.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!