Je souhaitais qu'un script avertisse visuellement les utilisateurs de mon système que leur mot de passe était sur le point d'expirer. J'ai trouvé celui-ci ici .
Le fait est que l'auteur de ce script obtient le nombre de jours nécessaires à l'expiration du mot de passe en convertissant les dates en secondes, en soustrayant puis en passant de secondes à jours.
Le problème est que mon système affiche ces dates en tant que "08 août 2018" (pour aujourd'hui). Si je m'en tiens à l'utilisation de la commande de date pour la conversion de la date en secondes comme l'auteur l'a fait, j'obtiens une erreur: date invalide 'il y a 08 août 2018'.
De l'aide?
Voici le script complet:
#! /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
Selon date
' documentation , l'entrée doit être au format indépendant des paramètres régionaux . Ils suggèrent d'utiliser LC_TIME=C
pour produire une sortie de date indépendante des paramètres régionaux. Dans votre cas, vous devrez ajouter la commande chage
pour lui donner une chaîne de date que date
pourra analyser:
chagedata=( $(LC_TIME=C chage -l $USER | cut -d ':' -f 2 | cut -d " " -f 2-) )