Linux 如何从终端读取日期并与当前日期进行比较
我想知道使用shell脚本从终端读取日期并与当前日期进行比较的适当方式 我有下面的脚本Linux 如何从终端读取日期并与当前日期进行比较,linux,shell,unix,date,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 a=`date+%Y-%m-%d` 而[1];做 回显
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
a=`date+%Y-%m-%d`
而[1];做
回显“输入日期”
阅读今天的文章
如果[$todate<$a];然后
打破
fi
回显“todate大于curDate”
完成
它没有按预期运行。请帮帮我
更新
这是我的最终版本
#! /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
#/bin/bash
日期=$(日期'+%s')
而[1];做
echo“输入日期[DD-MM-YYYY]:”
读D M Y
THIS=$(日期-d“$Y-$M-$d”+%s”)
如果((本<日期));然后
打破
fi
完成
谢谢大家 日期具有
+%s
格式
%s seconds since 1970-01-01 00:00:00 UTC
以秒为单位保存当前日期。然后将用户输入的日期也转换为秒。这样你就可以比较了
7.3。其他比较运算符
字符串比较
<
小于,按ASCII字母顺序排列
如果[[“$a”<“$b”]]
如果[“$a”\<“$b”]
请注意,“以下是解决方案:
在这个解决方案中,我将日期转换为单个整数,很明显,较大的日期总是比当前日期大
a=date+%Y%m%d
而[1];做
回显“输入日期”
阅读今天的文章
回显“$todate”>温度
完成使用此处解释的日期命令:谢谢,让我检查一下。[$todate<$a]
使用参数$todate]
调用命令[
,并从变量a
中指定的文件重定向输入。我怀疑这不是您想要的。使用[$a-lt$b]
比较整数。你说得对!感谢你指出:)因为不是每个日期都支持%s
,这稍微更便于携带,但需要注意的是,你必须始终使用YMD顺序和零填充(如原始问题中的+%Y-%m-%d
)。请注意,并非所有版本的[
(也不是所有[
是内置的shell)都将接受
<
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
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"