尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Shell脚本——生成sa文件名

Shell脚本——生成sa文件名
📅 发布时间:2026/6/22 15:05:46

Shell脚本——生成sa文件名

#!/bin/bash
###############################################
# 功能:
# 函数
Check_Days()判断闰年和平年,计算每月天数;
# 函数SaLog_Name()生成sa日志1-9日文件名和10-31日文件名;
# 判断当月和跨月:if (( $Startday < $Lastday )); then 调用函数并生成sa日志文件名;
#
#输出打印sa日志文件路径

  # [root@sysmt TestScripts]# sh for.sh
  # 请输入年份(如 起始日期:1-31,直接回车默认 1): 1
  # 请输入月份(如 结束日志:1-31,直接回车默认 1): 5
  # 1.生成当月sa文件:/var/log/sa/sa01
  # 2.生成当月sa文件:/var/log/sa/sa02
  # 3.生成当月sa文件:/var/log/sa/sa03
  # 4.生成当月sa文件:/var/log/sa/sa04
  # 5.生成当月sa文件:/var/log/sa/sa05

###############################################

 
# 数组起始位
let "j=0"

# 当月年份
Year=$(date "+%Y")
# 当月月份
Month=$(date "+%m")
# 当月日期
Day=$(date "+d")

Check_Days() {
    local File_Year=$1
    local File_Month=$2
    local flags=$3

    # 1. 判断闰年
    if (( File_Year%4==0 && (File_Year%100!=0 || File_Year%400==0) )); then
        # 判断闰年,变量Leap_Year为"1"
        Leap_Year=1
    else
        # 判断平年,变量Leap_Year为"0"
        Leap_Year=0
    fi

    # 计算跨月月份
    if (( flags == 1 )); then
        let "File_Month=File_Month-1"
    fi

    # 2. 再按月份给天数
    case $File_Month in
        1|3|5|7|8|10|12) days=31 ;;
        4|6|9|11)        days=30 ;;
        2)               days=$(( Leap_Year ? 29 : 28 )) ;;
        *)               echo "月份输入错误"; return 1 ;;
    esac
    # # 3. 输出结果
    # if (( Leap_Year )); then
    #     echo "$File_Year 年是闰年,$File_Month 月有 $days 天。"
    # else
    #     echo "$File_Year 年是平年,$File_Month 月有 $days 天。"
    # fi
    printf '%d\n' "$days"
}

SaLog_Name() {
    if (( $2 <= 9 )); then
        # 1-9日sar日志文件路径
        logfile[$1]="/var/log/sa/sa0$2"
    else
        # 10-31日sar日志文件路径
        logfile[$1]="/var/log/sa/sa$2"
    fi
}

# ------------- 交互部分 -------------
read -p "请输入年份(如  起始日期:1-31,直接回车默认 1): " Startday
read -p "请输入月份(如 结束日志:1-31,直接回车默认 1): " Lastday

Startday=${Startday:-1}
Lastday=${Lastday:-1}


# 判断一:当月sa日志
# 条件1:$Startday小于$Lastday,用for循环顺序读取日期编号,生成sa文件名;
# 判断二:跨月sa日志(当年跨月和跨年跨月)
# 条件1:$Startday大于$Lastday,为跨月sa日志;
# 条件2.1:当月$Month为2025年2-12月,计算本年度上月月份LastMonth=$Month-1为1-11,通过函数Check_Days()获取上月最大天数;
# 条件2.2:当月$Month为2025年1月,计算跨年上月月份LastMonth=$Month-1为0,即上年度12月重新赋值LastMonth=12,通过函数Check_Days()获取上月最大天数;
# 变量Startday:$Startday记录开始日期;
# 变量Lastday:$Lastday记录结束日期;
# 生成Sa文件名,通过“j=j+1”累计存放到数组SaFileName[j];
if (( $Startday < $Lastday )); then
    # 生成当月sa文件
    for This_Month_Day in $(seq $Startday $Lastday)
    do
        SaLog_Name $j $This_Month_Day
        echo "$((j+1)).生成当月sa文件:${logfile[$j]}"
        # 记录文件数量
        let "j=j+1"
    done
else
    # 生成跨月sa文件(两部分文件:上月sa文件和当月sa文件)
    # File_Year=$(stat /var/log/sa/sa04 | awk -F'[ -]' '/Modify/ {print $2}')
    # File_Month=$(stat /var/log/sa/sa04 | awk -F'[:-]' '/Modify/ {print $3}')
    # 函数Check_Days传参(例如:今年:2025,当月:12)

    # 跨月标记flags=1,函数Check_Days()中计算上月月份
    flags=1
    Days=$(Check_Days $Year $Month $flags)

    while true; do
        if (( ($Startday+$j) <= $Days )); then
            # 数组记录上月sa日志文件名称
            for LastMonth_day in $(seq $Startday $Days)
            do
                SaLog_Name $j $LastMonth_day
                echo "$((j+1)).生成跨月sa文件路径 ${logfile[$j]}"
                # 记录文件数量
                let "j=j+1"
            done
        else
            # 数组记录当月sa日志文件名称
            for ThisMonth_day in $(seq 1 $Lastday)
            do
                SaLog_Name $j $ThisMonth_day
                echo "$((j+1)).生成跨月sa文件路径 ${logfile[$j]}"
                # 记录文件数量
                let "j=j+1"
            done
            break
        fi
    done
fi

稳步前行,只争朝夕。

相关新闻

  • 2025超声波分散器专业厂家TOP5权威推荐:甄选企业助力材料分散升级 - 工业品牌热点
  • 37、Elasticsearch 内存管理与性能优化指南(上)
  • 2025年0 - 16岁儿童鞋服品牌大赏~闭眼入不亏! - 品牌测评鉴赏家

最新新闻

  • 零基础SRC漏洞挖掘实战指南:从思维转变到漏洞验证
  • AI如何重塑团队沟通:从私人语言壁垒到共识构建引擎
  • 想找邯郸大厅旋转门厂家?这些挑选要点你知道吗? - 热点速览
  • 郑州奢侈品包包回收|爱马仕香奈儿LV迪奥古驰,全城上门当场结算无手续费 - 沉迷学习28
  • 2026年东莞激光焊接厂家推荐榜单:镀锌板机箱/不锈钢焊接/电池汇流排/新能源配件焊接实力口碑之选 - 品牌发掘
  • 如何快速上手OBS Spout2插件:3步实现4K视频流无损传输

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号