2012-11-08 5 views
-2

J'ai une date particulière (anniversaire d'une personne) stockée dans un fichier, par exemple 01/02/1900. Je veux savoir si l'âge de la personne est supérieur ou égal à 20 ans. J'utilise des scripts shell.Aide au script Shell requise

Répondre

0

sur Linux avec GNU coreutils (c.-sur toutes les principales distributions Linux), vous pouvez utiliser date pour convertir les dates à un certain nombre de comparaison:

#!/bin/bash 

# Arguments: <age-limit> <birth-date> 

LIMIT=$(date --date="$1 years ago" +%s) 
BIRTH=$(date --date="$2" +%s) 

if [[ "$BIRTH" -gt "$LIMIT" ]]; then 
    echo "Birth-date less than $1 years ago" 
else 
    echo "Birth-date at least $1 years ago" 
fi 

Veuillez noter que les chaînes de date telles que 01/02/1900 sont ambiguës w.r.t. l'ordre du mois/jour. Sur mon système et mes paramètres régionaux date suppose que le mois précède le jour - YMMV.

1

Juste une blague, mais vous pouvez peut-être obtenir ce dont vous avez besoin: Il se lit d'une date par ligne de /path/to/file.txt et sorties quel âge cette personne est et Wheater il est plus jeune ou plus vieux que 20.

#!/bin/bash 

while read DATE junk; do 
    QDATE=$(echo "$DATE" | sed 's#/#%2F#g') 
    ANS=$(curl -s "http://www.wolframalpha.com/input/?i=%28now+-+${QDATE}%29+in+years" | grep -Eo '"[0-9]+(\.[0-9]+)? years"') 
    AGE=$(echo "$ANS" | sed -r -e 's/"//g' -e 's/ years//g' -e 's/\..+//g') 

    if [ -z "$AGE" ]; then 
     echo "$DATE: ERROR occured" 
     continue 
    fi 

    if [ $AGE -ge 20 ]; then 
     echo "$DATE ($ANS): Person older or equal to 20 years" 
    else 
     echo "$DATE ($ANS): Person younger than 20 years" 
    fi 
done < /path/to/file.txt 

Exemple:

 

$ cat /path/to/file.txt 
01/01/1900 
08/11/1992 
09/12/1992 
$ bash test.sh 
01/01/1900 ("112.9 years"): Person older or equal to 20 years 
08/11/1992 ("20 years"): Person older or equal to 20 years 
09/12/1992 ("19.92 years"): Person younger than 20 years 
 
+2

Grande délégation travail là en utilisant WolframAlpha;) –

+0

hehe, en effet :-) –