我想要一个脚本来直观地警告我系统上的用户他们的密码即将过期。我在这里找到了这个。
问题是,该脚本的作者通过将日期转换为秒、减去然后将秒传递到天来获取密码到期的天数。
问题是我的系统将这些日期输出为“2018 年 8 月前”(今天)。如果我像作者一样坚持使用 date 命令将日期转换为秒,那么我会收到一个错误:invalid date 'ago 08, 2018'。
有什么帮助吗?
这是完整的脚本:
#! /bin/bash
# Issue a desktop notification if the user password is about to expire
# Uses the "chage" command frome the "passwd" package (likely installed)
# Best added to the session startup scripts
# get password data in array
saveIFS=$IFS
IFS=$'\n'
chagedata=( $(chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )
IFS=$saveIFS
# obtain times in seconds
now=$(date +%s)
expires=$(date +%s -d "${chagedata[1]}")
# compute days left (roughly...)
daysleft=$(( ($expires-$now)/(3600*24) ))
echo "Days left: $daysleft"
# leave some evidence that the script really ran at startup
echo "Days left: $daysleft" > /var/tmp/$(basename $0).out
# determine and send the notification (stays mute if outside the warning period)
if [[ $daysleft -le 0 ]]
then
notify-send -i face-worried.png -t 0 "Password expiration" "Your password expires within a day"'!'
elif [[ $daysleft -le ${chagedata[6]} ]]
then
notify-send -i face-smirk.png -t 0 "Password expiration" "Your password expires in $daysleft days."
fi
根据
date
的文档,当前 的 输入 必须 是 与 区域 无关 的 格式. 他们建议使用LC_TIME=C
生成独立于语言环境的日期输出。在您的情况下,您必须预先添加chage
命令以使其输出date
能够解析的日期字符串: