shell脚本利用正则检查crontab的

867人浏览 / 0人评论

#!/bin/bash

CRONTAB_FILE="/etc/crontab"

# 检查文件是否存在
if [ ! -f "$CRONTAB_FILE" ]; then
    echo "文件 $CRONTAB_FILE 不存在!"
    exit 1
fi

# 使用扩展的正则表达式,简化匹配模式
shopt -s extglob

# 正则表达式段,用于检查每个cron字段
cron_expr="(\\*|\\*\/[0-9]+|[0-9,-]+)( +(\\*|\\*\/[0-9]+|[0-9,-]+)){4}"
user_expr="[a-zA-Z0-9_-]+"
command_expr=".*"

# 通过行遍历文件
while IFS= read -r line; do
    # 忽略注释、空行和特定的环境变量定义行
    [[ "$line" =~ ^#.*$ || "$line" == "" || "$line" == "SHELL=/bin/bash" || "$line" == "PATH=/sbin:/bin:/usr/sbin:/usr/bin" || "$line" == "MAILTO=''" ]] && continue

    # 检查cron格式
    regex="^$cron_expr +$user_expr +$command_expr$"

    if [[ ! "$line" =~ $regex ]]; then
        echo "格式错误: $line"
    fi

done < "$CRONTAB_FILE"

echo "检查完毕!"

全部评论