Я запускаю следующий скрипт, который имеет функцию, предназначенную для того, чтобы рассказать мне, есть ли одна дата перед другой, как показано в самом конце скрипта.Почему мой скрипт bash создает файлы, не сообщая об этом?
Теперь в скрипте есть несколько ошибок. Но один из них, в частности, странный. Сценарий создает файлы, названные датами, которые вводятся последним аргументом.
Он создает файлы под названием «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]] '. –
http://www.shellcheck.net/ является вашим другом. –
'' '' '' '' '' как оператор сравнения строк, но вы должны убежать от него, чтобы '' '' фактически получил его в качестве аргумента. – chepner