我寫下面的代碼段給定的日期後,以計算日期:如何在我的日期算術shell腳本中查找錯誤?
date=$DATE_FINAL
declare -a max_month=(0 31 28 31 30 31 30 31 31 30 31 30 31)
eval $(echo $date|sed 's!\(....\)\(..\)\(..\)!year=\1;month=\2;day=\3!')
((year4=year%4))
((year100=year%100))
((year400=year%400))
if [ \($year4 -eq 0 -a \
$year100 -ne 0 \) -o \
$year400 -eq 0 ]
then
declare -a max_month=(0 31 28 31 30 31 30 31 31 30 31 30 31)
fi
day=$((day+1))
if [ $day -gt ${max_month[$month]} ] >| /wload/baot/home/baoted9/logs_bde27_conversion_1/ataa_display.logs 2>&1
then
day=1
month=$((month+1))
if [ $month -gt 12 ]
then
year=$((year+1))
month=1
fi
fi
if [ $month -eq "08" ] || [ $month -eq "09" ]
then
future_date_final=$(echo $year"$month"$day)
else
future_date_final=$(printf "%4.4d%2.2d%2.2d" $year $month $day)
fi
echo "this is your final business date $future_date_final"
它計算日期正確的代碼的如下端部然而引發錯誤 -
line 79: 08: value too great for base (error token is "08")
它只是看起來太難看,不知道如何刪除它,否則代碼工作正常,嘗試將其重定向到仍然出現的日誌文件。 另外,我現在所面臨的問題與使用代碼普通cd命令下面的代碼以紅色突出顯示 -
echo "pset date $Param_date_1"
cd /wload/baot/home/baotasa0/sandboxes_finance/ext_ukba_bde/pset >| /wload/baot/home/baoted9/logs_bde27_conversion_1/at_display.logs 2>&1
sh UKBA_publish.sh UKBA $Param_date_1 3 >| /wload/baot/home/baoted9/logs_bde27_conversion_1/ate_display.logs 2>&1
錯誤是 -
./auto2.sh: line 190: syntax error: unexpected end of file
嗯,我可以建議https://unix.stackexchange.com/questions/49053/linux-add-x-days-to-date-and-get-new-virtual-date? – 2017-07-07 14:49:34
第79行的錯誤*會影響正確性 - 它會使您的比較始終是錯誤的,無論它是真實還是錯誤。 –
...那個問題是因爲以前導0開頭的數字被解析爲八進制數,而'8'當然是八進制數中不可能的數字。不要將前導零置於用於計算的值上 - 只在輸出時間添加它們。 –