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

请求修正Shell脚本:对比/etc/shadow账户过期日期并处理密码

修复Shell脚本语法错误并实现过期账户密码清除功能

问题说明

原脚本运行时出现语法错误:exppass: line 7: syntax error: unexpected end of file,原因是脚本未完成,缺少if和while结构的闭合语句,同时未正确初始化关键变量、处理/etc/shadow的列读取逻辑。

完整修复脚本

#!/bin/bash
# 将当前日期转换为从1970-01-01开始的天数(与/etc/shadow过期日期格式匹配)
today=$(($(date +%s)/86400))

# 直接读取/etc/shadow文件,避免不必要的cat管道
while IFS=":" read -r col1 col2 col3 col4 col5 col6 col7 col8 col9; do
    # 跳过无过期日期(永不过期)的账户
    [ -z "$col8" ] && continue
    expire=$col8

    # 判定账户是否已过期
    if [ "$expire" -lt "$today" ]; then
        echo "处理过期账户: $col1"
        # 清除账户密码,--delete选项会移除密码字段,使账户无密码登录(需结合系统配置)
        passwd --delete "$col1"
    fi
done < /etc/shadow

关键修复点

  • 补充fi闭合if判断、done闭合while循环,解决语法错误;
  • 初始化today变量,将当前时间戳转换为与/etc/shadow一致的天数格式;
  • 正确赋值expire为/etc/shadow的第8列(账户过期日期);
  • 处理无过期日期的账户,避免无效判断;
  • 使用文件重定向替代cat管道,提升脚本效率;
  • 添加read -r避免转义字符解析问题;
  • 增加操作提示,明确当前处理的账户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:52