我有一个特定的日期(一个人的生日)存储在一个文件中,例如 01/02/1900。我想知道这个人的年龄是否大于 20 岁。我正在使用 shell 脚本。
问问题
100 次
2 回答
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
于 2012-11-08T12:02:31.340 回答
0
在带有GNU coreutils的Linux上(即在所有主要的 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
如月/日顺序不明确。在我的系统和语言环境date
中,假设月份在日期之前 - YMMV。
于 2012-11-09T21:04:25.747 回答