【发布时间】:2015-12-14 18:17:15
【问题描述】:
我正在运行以下脚本,该脚本的功能旨在告诉我一个日期是否早于另一个日期,如脚本的最底部所示。
现在,脚本有一些错误。但其中一个特别奇怪。该脚本创建由最后一个参数输入的日期命名的文件。
它会创建名为“09”、“12”和“2015”的文件。为什么要创建这些文件?这是功能。你会注意到最后几行使用输入调用函数
function compare_two {
if [ $1 < $2 ];
then
return 2
elif [ $1 > $2 ];
then
return 3
else
return 4
fi
}
function compare_dates {
# two input arguments:
# e.g. 2015-09-17 2011-9-18
date1=$1
date2=$2
IFS="-"
test=( $date1 )
Y1=${test[0]}
M1=${test[1]}
D1=${test[2]}
test=( $date2 )
Y2=${test[0]}
M2=${test[1]}
D2=${test[2]}
compare_two $Y1 $Y2
if [ $? == 2 ];
then
echo "returning 2"
return 2
elif [ $? == 3 ];
then
return 3
else
compare_two $M1 $M2;
if [ $? == 2 ];
then
echo "returning 2"
return 2
elif [ $? == 3 ];
then
return 3
else
compare_two $D1 $D2;
if [ $? == 2 ];
then
echo $?
echo "return 2"
return 2
elif [ $? == 3 ];
then
echo "returning 3"
return 3
else
return 4
fi
fi
fi
}
compare_dates 2015-09-17 2015-09-12
echo $?
结果不会抛出错误,而是输出
returning 2
2
结果不正确,我知道。但我稍后会解决这个问题。是什么创建了这些文件,我该如何停止它?谢谢。
【问题讨论】:
-
因为
>不是您认为的运算符。它不是[中的大于运算符。它是输出重定向。你想要-gt或[[ $1 > $2 ]]。 -
shellcheck.net 是你的朋友。
-
[确实将>作为字符串比较运算符,但您必须对其进行转义,以便[实际上将其作为参数接收。
标签: bash file shell scripting osx-yosemite