需要Shell脚本帮助

时间:2012-11-08 11:38:07

标签: string shell unix

我有一个特定日期(一个人的生日)存储在文件中,例如01/02/1900。 我想知道这个人的年龄是否大于20岁。 我正在使用shell脚本。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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。