如何从终端读取日期并与当前日期进行比较

时间:2013-01-24 12:47:13

标签: linux shell unix date

我想知道从终端读取日期并使用shell脚本与当前日期进行比较的适当方式

我有以下脚本,

a=`date +%Y-%m-%d`
while [ 1 ] ; do
        echo "Enter Date"
    read todate
    if [ $todate < $a ];then
        break;
    fi
    echo "todate greater than curDate" 
done 

它没有按预期运行。请帮帮我。

更新

这是我的最终版本,

#! /bin/bash
DATE=$(date '+%s')
while [ 1 ] ; do
        echo "Enter Date[DD MM YYYY]:"    
    read D M Y
    THIS=$(date -d "$Y-$M-$D" '+%s')

    if (( THIS < DATE )) ; then
        break
    fi
done

谢谢大家!

3 个答案:

答案 0 :(得分:4)

来自Advanced Bash-Scripting Guide:

7.3。其他比较运算符

...

字符串比较

...

<
    is less than, in ASCII alphabetical order

    if [[ "$a" < "$b" ]]

    if [ "$a" \< "$b" ]

    Note that the "<" needs to be escaped within a [ ] construct.

所以,你的

   if [ $todate < $a ];then

变为

if [ $todate \< $a ];then

if [[ $todate < $a ]];then

答案 1 :(得分:2)

日期格式为+%s

 %s     seconds since 1970-01-01 00:00:00 UTC

您以秒为单位保存当前日期。然后在第二个转换用户输入日期。所以你可以比较。

答案 2 :(得分:0)

以下是解决方案:

在此解决方案中,我将日期转换为单个整数,很明显,更大的日期将始终是比当前日期更大的整数

A = date +%Y%m%d

而[1];做

回显“输入日期”     阅读todate     echo“$ todate”&gt;温度

for i in 1 2 3
    do 
      y=`cut -d- -f$i temp`
      x=$x$y
    done 
if [ $x -lt $a ];then
    exit;
fi
echo "todate greater than curDate" 

完成