@ William
that is my old script:
#!/bin/ksh
#########################################################"
# Script name : calculate_date.sh"
# Path : /home/oracle/dba/bin"
# Author : Jonny Schulz"
# Rheinland Versicherungen"
# Create : 27.06.2003"
# Change :"
# Of :"
# Description"
# This Script calculate Date."
#########################################################"
#####################
### VARIABLES ###
#####################
date=`date +'%Y.%m.%d'`
yyyy=`date +'%Y'`
yy=`date +'%y'`
month=`date +'%m'`
day=`date +'%d'`
sign=$1
count=$2
format=$3
#####################
### FUNCTIONS ###
#####################
do_help()
{
echo ""
echo "#########################################################"
echo "# Script name : calculate_date.sh"
echo "# Path : /home/oracle/dba/bin"
echo "# Author : Jonny Schulz"
echo "# Rheinland Versicherungen"
echo "# Create : 27.06.2003"
echo "# Change :"
echo "# Of :"
ec---"
echo "# Description"
echo "# This Script calculate Date."
echo "#########################################################"
echo ""
echo " Please enter the following parameters:"
echo " calculate_date.sh [+/-] [0123456789] [1/2/3/4/5/6/7/8]"
echo ""
echo " [+/-] = Art to calculate"
echo " [0123456789] = Count days"
echo " [1/2/3/4/5/6/7/8] = Which format"
echo ""
echo " Possible formats:"
echo " ------------------"
echo " YYYY.MM.DD (1)"
echo " YYYYMMDD (2)"
echo " YY.MM.DD (3)"
echo " YYMMDD (4)"
echo " DD.MM.YYYY (5)"
echo " DDMMYYYY (6)"
echo " DD.MM.YY (7)"
echo " DDMMYYYY (8)"
echo ""
echo ""
}
minus()
{
while [[ $count != 0 ]]
do
count=$(($count-1))
case $month in
01 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=12
year=$(($year-1))
fi
;;
02 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=01
fi
;;
03 )
leap_year=`bc EOF
scale=8
$year/4
EOF`
leap_year=`echo $leap_year | cut -d'.' -f2`
day=$(($day-1))
if [[ $day = 0 ]]
then
if [[ $leap_year = "00000000" ]]
then
day=29
month=02
else
day=28
month=02
fi
fi
;;
04 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=03
fi
;;
05 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=30
month=04
fi
;;
06 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=05
fi
;;
07 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=30
month=06
fi
;;
08 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=07
fi
;;
09 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=08
fi
;;
10 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=30
month=09
fi
;;
11 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=31
month=10
fi
;;
12 ) day=$(($day-1))
if [[ $day = 0 ]]
then
day=30
month=11
fi
;;
esac
done
}
plus()
{
while [[ $count != 0 ]]
do
count=$(($count-1))
case $month in
01 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=02
fi
;;
02 )
leap_year=`bc EOF
scale=8
$year/4
EOF`
leap_year=`echo $leap_year | cut -d'.' -f2`
day=$(($day+1))
if [[ $leap_year = "00000000" ]]
then
if [[ $day = 30 ]]
then
day=01
month=03
fi
else
if [[ $day = 29 ]]
then
day=01
month=03
fi
fi
;;
03 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=04
fi
;;
04 ) day=$(($day+1))
if [[ $day = 31 ]]
then
day=01
month=05
fi
;;
05 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=06
fi
;;
06 ) day=$(($day+1))
if [[ $day = 31 ]]
then
day=01
month=07
fi
;;
07 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=08
fi
;;
08 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=09
fi
;;
09 ) day=$(($day+1))
if [[ $day = 31 ]]
then
day=01
month=10
fi
;;
10 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=11
fi
;;
11 ) day=$(($day+1))
if [[ $day = 31 ]]
then
day=01
month=12
fi
;;
12 ) day=$(($day+1))
if [[ $day = 32 ]]
then
day=01
month=01
year=$(($year+1))
fi
;;
esac
done
}
################
### MAIN ###
################
case $format in
1 | 2 | 5 | 6 ) year=$yyyy ;;
3 | 4 | 7 | 8 ) year=$yy ;;
* ) do_help ;;
esac
if [[ $sign = "+" ]]
then
plus
else
if [[ $sign = "-" ]]
then
minus
else
do_help
fi
fi
case $day in
1 ) day="01" ;;
2 ) day="02" ;;
3 ) day="03" ;;
4 ) day="04" ;;
5 ) day="05" ;;
6 ) day="06" ;;
7 ) day="07" ;;
8 ) day="08" ;;
9 ) day="09" ;;
esac
case $year in
1 ) year="01" ;;
2 ) year="02" ;;
3 ) year="03" ;;
4 ) year="04" ;;
5 ) year="05" ;;
6 ) year="06" ;;
7 ) year="07" ;;
8 ) year="08" ;;
9 ) year="09" ;;
esac
case $format in
1 | 3 ) date_calculate=${year}.${month}.${day}
;;
2 | 4 ) date_calculate=echo ${year}${month}${day}
;;
5 | 7 ) date_calculate=echo ${day}.${month}.${year}
;;
6 | 8 ) date_calculate=echo ${day}${month}${year}
;;
esac
echo $date_calculate
exit 0
unfortunately the runtime is bad!
for this reason i create a new script and use the sql statement. i only had surch for a better script, but no script use a better runtime...