我想要一个脚本来直观地警告系统上的用户他们的密码即将过期。我找到了这个这里。
事实是,该脚本的作者通过将日期转换为秒数,减去秒数再转换为天数来获取密码过期的天数。
问题是我的系统将这些日期输出为“2018 年 8 月 8 日”(今天)。如果我坚持使用 date 命令将日期转换为秒,就像作者所做的那样,那么我会收到错误:无效日期“2018 年 8 月 8 日”。
有什么帮助吗?
以下是完整脚本:
#! /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
答案1
根据date
文档,当前输入必须采用与语言环境无关的格式。他们建议使用LC_TIME=C
来生成与语言环境无关的日期输出。对于您的情况,您必须在命令前面添加前缀chage
,以使其输出date
能够解析的日期字符串:
chagedata=( $(LC_TIME=C chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )