⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.ksh

📁 ksh 实现的基于hpux下的性能数据以及故障的采集程序。可以作为新手练手使用
💻 KSH
📖 第 1 页 / 共 2 页
字号:
#!/bin/ksh# 取两个日期之间的间隔天数# 用法: interval  日期1[YYYYMMDD]  日期2[YYYYMMDD] function interval {if [[ $1 > $2 ]] then  str1=$2  str2=$1else  str1=$1  str2=$2fiyy1=`echo $str1|cut -c 1-4`mm1=`echo $str1|cut -c 5-6`dd1=`echo $str1|cut -c 7-8`yy2=`echo $str2|cut -c 1-4`mm2=`echo $str2|cut -c 5-6`dd2=`echo $str2|cut -c 7-8`count_day=`expr $dd2 - $dd1`while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ]do        mm2=`expr $mm2 - 1`        [ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`        aaa=`cal $mm2 $yy2`        bbb=`echo $aaa|awk '{print $NF}'`        count_day=`expr $count_day + $bbb`doneecho $count_day }# 日期合法性检查函数# 用法: valid_date 日期[YYYYMMDD]function valid_date{  ret=0  (($#!=1))&&{ echo "Usage:yyyymmdd";return 1; }  year=`expr substr $1 1 4`  month=`expr substr $1 5 2`  day=`expr substr $1 7 2`  cal $month $year 2>/dev/null | grep -q "$day" 2>/dev/null  && ret=0 || ret=1  return $ret}#返回月份的天数# 用法: month_daysfunction month_days{        Y=`expr substr $1 1 4`        M=`expr substr $1 5 2`        r1=`expr $Y \% 4`        r2=`expr $Y \% 100`        r3=`expr $Y \% 400`        case $M in        01|03|05|07|08|10|12) days=31          ;;        04|06|09|11) days=30          ;;        esac        if [ $M -eq 02 ]        then                if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ]                then                        days=29                else                        days=28                fi        fi        echo $days}# 返回昨天日期# yesterday 日期[YYYYMMDD]function yesterday{  Y=`expr substr $1 1 4`  M=`expr substr $1 5 2`  D=`expr substr $1 7 2`  YY=`expr $Y - 1`  MM=`expr $M - 1`  DD=`expr $D - 1`  MM=`printf "%02d" $MM`  DD=`printf "%02d" $DD`  dd=$Y$MM  dad=`month_days $dd`  be_date=$Y$M$DD  if [ $D -eq 01 ]  then    if [ $M -ne 01 ]    then      be_date=$Y$MM$dad    fi    if [ $M -eq 01 ]    then       be_date=$YY"1231"    fi  fi  echo $be_date}# 取明天的日期# nextday 日期[YYYYMMDD]function nextday{  Y=`expr substr $1 1 4`  M=`expr substr $1 5 2`  D=`expr substr $1 7 2`  YY=`expr $Y + 1`  MM=`expr $M + 1`  DD=`expr $D + 1`  MM=`printf "%02d" $MM`  DD=`printf "%02d" $DD`  r1=`expr $Y \% 4`  r2=`expr $Y \% 100`  r3=`expr $Y \% 400`  next_date=$Y$M$DD  if [ $D -eq 30 ]  then          case $M in          04|06|09|11) next_date=$Y$MM"01"            ;;          esac  fi  if [ $D -eq 31 ]  then          next_date=$Y$MM"01"          case $M in          12) next_date=$YY"0101"              ;;          esac  fi  if [ $M -eq 02 ]  then          if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ]          then                  if [ $D -eq 29 ]                  then                          next_date=$Y$MM"01"                  fi          else                  if [ $D -eq 28 ]                  then                          next_date=$Y$MM"01"                  fi          fi  fi  echo $next_date}# 取上一天的日期?# 用法: lastday 日期[YYYYMMDD]function  lastday{  if [[ ${#1} = 0 ]] then     return 1  fi  if [[ ${#1} != 8 ]] then     return 1  fi  #   设置当前的年、月、日     year=`expr substr "$1" 1 4`  month=`expr substr "$1" 5 2`   day=`expr substr "$1" 7 2`      #   月份加0,使得月份成为“整型”   :)     month=`expr   $month   +   0`         #   当前日期减一,得到昨天的日子     day=`expr   $day   -   1`         #   如果上面得到的昨天的日子为0的话就得考虑月份了     if   [   $day   -eq   0   ];   then         #   当前月份减一得到上一个月份         month=`expr   $month   -   1`             #   如果上面得到的上一个月份为0的话就得考虑年份了         if   [   $month   -eq   0   ];   then             month=12             day=31             year=`expr   $year   -   1`             #   如果月份非0就需要确定当前月份的天数         else             case   $month   in                 1|3|5|7|8|10|12)   day=31;;                 4|6|9|11)   day=30;;                 2)                     if   [   `expr   $year   %   4`   -eq   0   ];   then                         if   [   `expr   $year   %   400`   -eq   0   ];   then                             day=29                         elif   [   `expr   $year   %   100`   -eq   0   ];   then                             day=28                         else                             day=29                         fi                     else                         day=28                     fi                 ;;             esac         fi     fi         #   打印出昨天的年、月、日     printf "%04s%02s%02s\n"   ${year} ${month} ${day}   }#计算某日前若干天的日期#date=YYYYMMDD#Usage: before_date 日期[YYYYMMDD] 天数function  before_date{  if [[ $# != 2 ]] then     echo "用法 before_date 日期[YYYYMMDD] 天数"     return 1  fi  str=$1  days=$2  yy=`echo $str|cut -c 1-4`  mm=`echo $str|cut -c 5-6`  dd=`echo $str|cut -c 7-8`  sav_dd=$days  (( days = days - dd ))  while (( days >=  0 ))  do          (( mm = mm -1 ))          [[  $mm =  0 ]]  && mm=12 && (( yy = yy - 1 ))          aaa=`cal $mm $yy`          bbb=`echo $aaa|awk '{print $NF}'`          (( days = days - bbb ))  done  (( dd = 0 - days ))  printf "%04s%02s%02s\n" $yy $mm $dd }#计算某日后若干天日期#date=YYYYMMDD#用法:after_date 日期[YYYYMMDD]  天数function after_date{  if [[ $# != 2 ]] then     echo "用法 after_date 日期[YYYYMMDD] 天数"     return 1  fi  str=$1  days=$2  yy=`echo $str|cut -c 1-4`  mm=`echo $str|cut -c 5-6`  dd=`echo $str|cut -c 7-8`  (( days = days + dd ))  while ((  days >  0 ))  do          aaa=`cal $mm $yy`          bbb=`echo $aaa|awk '{print $NF}'`          sav_dd=$days          sav_mm=$mm          sav_yy=$yy          (( days = days - bbb ))          (( mm = mm + 1 ))          (( mm > 12 )) && mm=1 && (( yy = yy + 1 ))  done  printf "%04s%02s%02s\n" $sav_yy $sav_mm $sav_dd }#取上月末日期function get_lastday_of_lastmonth{  if [[ $# = 0 ]] then    yy=`date +%Y`    mm=`date +%m-1|bc`  else     yy=`expr substr $1 1 4`    mm=`expr substr $1 5 2`    (( mm = mm - 1 ))  fi  (( $mm < 1 )) &&   mm=12 && (( yy = yy - 1 ))   echo cal $mm $yy  aaa=`cal $mm $yy`  dd=`echo $aaa|awk '{print $NF}'`  printf "%04s%02s%02s\n" $yy $mm $dd }# 判断是否月末# 用法: is_monthend [日期]# 日期格式为YYYYMMDDfunction is_monthend{  if [[ $# = 0 ]] then    mm=`date +%m`    today=`date +"%Y%m%d"`  else    mm=`expr substr $1 5 2`    today=$1  fi  after_date $today 1 | read -r tomorrow#  echo tomorrow is $tomorrow  to_month=`expr substr $tomorrow 5 2`  if [[ $mm != $to_month ]] then    return 0  else    return 1  fi }# 判断是否半年末# 用法: is_halfyear [日期]# 日期格式为YYYYMMDDfunction is_halfyear{  if [[ $# = 0 ]] then    today=`date +"%Y%m%d"`  else    today=$1  fi  day=`expr substr $today 5 4`  if [[ $day = "0630" ]] then    return 0  else    return 1  fi}# 判断是否年末# 用法: is_year_end [日期]# 日期格式为YYYYMMDDfunction is_year_end{  if [[ $# = 0 ]] then    today=`date +"%Y%m%d"`  else    today=$1  fi  day=`expr substr $today 5 4`  if [[ $day = "1231" ]] then    return 0  else    return 1  fi}# 判断是否季末# 用法: is_quarter _end [日期]# 日期格式为YYYYMMDDfunction is_quarter_end{  if [[ $# = 0 ]] then    today=`date +"%Y%m%d"`  else    today=$1  fi  day=`expr substr $today 5 4`  if [[ $day = "0331"  || $day = "0630" || $day = "0930" || $day = "1231" ]] then    return 0  else    return 1  fi}# 判断是否是周末# 用法: is_week_end [日期]# 日期格式为YYYYMMDDfunction is_week_end{  if [[ $# = 0 ]] then    weekday=`date +'%w'`  else    today=$1  fi  if [[ $weekday = 0 ]] then     return 0  else     return 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -