首页 > 自动化运维 > Shell > shell 脚本之 日期换算
2015
07-11

shell 脚本之 日期换算

今天翻出笔记看到/etc/shadow中的第三个字段最后一次密码变更日期为16588,大家都知道这个是从1970-01-01到修改密码时所经过的天数,怎么来的?以下是两个例子:

首先,展示一下/etc/shadow的格式,共9个字段

[root@SB study]# tail -n 1 /etc/shadow
sb:!!:16588:0:99999:7:::

例1:计算/etc/shadow中所有用户的密码修改时间

#!/bin/bash
#Calculate the time of third in /etc/shadow 
#author songbai
#2015/7/10

#values
   declare -i Today="((`date +%s` /86400))"
   third=`awk 'BEGIN{FS=":"}{print $3}' /etc/shadow`
   lines=0
#fuction 
#只是为了练习一下自定义函数的应用.
shadow () {
 sum=$(($Today - $oneday - 1))
 datetime=`date -d "$sum days ago" +%F`
 username=`awk 'BEGIN{FS=":"}{print $1}' /etc/shadow| head -n $lines | tail -n 1`
 if [ $oneday -gt $Today ];then
        echo " $username  error,the time more than today!"
 else    
        echo  "last change of password :$datetime ($username)" >> /tmp/total
 fi
}
 
for oneday in $third
do
   lines=$[ $lines + 1]
   shadow
done

运行结果

[root@SB study]# tail -n 1 /tmp/total 
last change of password :2015-06-03 (sb)

例2:输入用户名得到密码修改日期。

#!/bin/bash
#Calculate the time of third in /etc/shadow 
#author songbai
#manul input username 
 read -p "Please input username: " username
 exec 2> /dev/null
 Today=$((`date +%s` /86400))
 oneday=`grep "$username" /etc/shadow|awk 'BEGIN{FS=":"}{print $3}'`
 own=`id $username`
#判断用户是否存在
if  [ -n "$own"  ];then
        declare -i sum="(($Today - $oneday))"
        datetime=`date -d "$sum days ago" +%F`
        echo "The last chaged: $datetime"
 else
        echo "$username no exist!"
        exit 7
fi

运行结果

[root@SB study]# ./manul_calculate.sh 
Please input username: sb
The last chaged: 2015-07-11
[root@SB study]# ./manul_calculate.sh 
Please input username: songbai
songbai no exist!




最后编辑:
作者:wood-man
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复