You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化生日追踪Bash脚本,消除重复代码?

优化生日追踪脚本的几种方案

方案1:使用Bash关联数组(推荐)

将日期与姓名以键值对形式存入关联数组,遍历数组匹配当前日期即可,无需重复编写if逻辑,后续新增或删除生日只需修改数组内容,维护更便捷。

示例代码:

#!/bin/bash
# 获取当前日期,格式为"月-日"
current_date=$(date +%b-%d)

# 定义生日关联数组:键为日期,值为对应姓名
declare -A birthdays=(
    ["Sep-09"]="abc"
    ["Oct-11"]="xyz"
    # 可继续添加更多生日条目
    ["Dec-25"]="foo"
)

# 遍历数组,检查匹配日期并输出祝福
for date in "${!birthdays[@]}"; do
    if [[ "$current_date" == "$date" ]]; then
        echo "Happy Birthday ${birthdays[$date]}!"
    fi
done

方案2:使用列表循环(兼容旧版Bash)

若你的Bash版本低于4.0(不支持关联数组),可将日期和姓名按顺序存入列表,每次取两个元素(日期、姓名)进行判断:

#!/bin/bash
current_date=$(date +%b-%d)

# 定义生日列表:日期与姓名成对出现
birthdays=(
    "Sep-09" "abc"
    "Oct-11" "xyz"
    "Dec-25" "foo"
)

# 遍历列表,步长为2以获取成对的日期和姓名
for ((i=0; i<${#birthdays[@]}; i+=2)); do
    target_date=${birthdays[$i]}
    name=${birthdays[$i+1]}
    if [[ "$current_date" == "$target_date" ]]; then
        echo "Happy Birthday $name!"
    fi
done

方案3:使用外部配置文件(适合大量生日场景)

如果需要维护的生日数量较多,可将日期与姓名存入独立配置文件,脚本读取文件内容处理,便于单独管理生日信息:

首先创建配置文件birthdays.conf,每行格式为日期 姓名,支持空行和注释(以#开头):

# 生日配置文件
Sep-09 abc
Oct-11 xyz
Dec-25 foo

然后编写脚本读取该配置文件:

#!/bin/bash
current_date=$(date +%b-%d)
config_file="./birthdays.conf"

# 检查配置文件是否存在
if [[ -f "$config_file" ]]; then
    # 逐行读取配置文件,跳过空行和注释
    while read -r date name; do
        [[ -z "$date" || "$date" =~ ^# ]] && continue
        if [[ "$current_date" == "$date" ]]; then
            echo "Happy Birthday $name!"
        fi
    done < "$config_file"
else
    echo "配置文件 $config_file 不存在"
    exit 1
fi

以上方案均能替代原脚本中重复的if语句,逻辑更简洁,维护成本更低。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:05:48