2012-11-08 247 views
-2

我有一個存儲在文件中的特定日期(一個人的生日),例如01/02/1900。 我想知道人的年齡是否大於20歲。 我正在使用shell腳本。需要Shell腳本幫助

回答

0

LinuxGNU coreutils(即在所有主要的Linux發行版),您可以使用date這兩個日期轉換爲數字作比較:

#!/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 

請注意日期字符串如01/02/1900不明確w.r.t.月/日訂單。在我的系統和區域設置date中假定該月的前一天是YMMV。

1

只是一個玩笑,但也許你可以得到你所需要的:它從/path/to/file.txt和輸出的那個人有多老讀取每行一個日期和維特是年輕或年長超過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 

示例:

 

$ 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

偉大的代表團在那裏使用WolframAlpha工作;) –

+0

嘿,確實:-) –