我试图编写一个bash脚本来通知过期的用户密码。与“never”进行字符串比较时,我遇到了一个问题。我该如何避免?
我引用了Shell script to send email before password expires并做了一些调整。然而,在字符串比较方面,我面临着这个问题。如果$userexp等于never,我打算跳过代码执行。但是,它没有发生,并继续执行代码的下一部分,我得到下面的错误
日期:无效日期“never”
#!/bin/bash
#
user=user
HOST=`uname -n`
# convert current date to seconds
currentdate=$(date +%s)
# find expiration date of user
userexp=$(chage -l $user | grep 'Password expires' | cut -d: -f2)
if [[ ! -z $userexp ]]
then
# convert expiration date to seconds
#passexp=$(date -d "$userexp" "+%s")
if [ "$userexp" = "never" ]
then
echo "Password for $user in $HOST is set to never expire"
else
# convert expiration date to seconds
passexp=$(date -d "$userexp" "+%s")
# find the remaining days for expiry
(( exp = $passexp - $currentdate ))
# convert remaining days from sec to days
(( expday = $exp / 86400 ))
if (($expday < 10 ))
then
echo "Password for $user in $HOST will expire in $expday day/s"
else
echo "Password for $user in $HOST still have much time to expire"
fi
fi
fi
为什么我的字符串比较没有按预期工作,我该如何修复它。
最佳答案
如果$userexp
等于“从不”你的代码,即使不是你能做的最好的(没有冒犯:),也应该有效。它认为在你的例子中可能有一个前导空格,也就是说,永远不要在空白处。检查一下,如果是这样,在您的if条件下将"never"
更改为" never"
。
关于linux - 如何修复密码到期脚本中的无效日期错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57558752/