![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !! |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Compare date from db2 table to yesterday's Unix system date | sasaliasim | Shell Programming and Scripting | 9 | 12-01-2008 11:37 PM |
| Get date and time for past 1 hour from current date | spch2o | Shell Programming and Scripting | 5 | 08-29-2008 04:32 AM |
| Processing a log file based on date/time input and the date/time on the log file | primp | Shell Programming and Scripting | 4 | 03-16-2008 11:23 AM |
| compare date with date in file | siog | UNIX for Dummies Questions & Answers | 2 | 10-04-2006 12:10 PM |
| compare today's date with date in a file | siog | UNIX for Dummies Questions & Answers | 4 | 10-04-2006 11:55 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
Compare Date And Time
Hi
can somebody send me the code for compare two date and run a shell script. following is the code which i actully want but I am getting errors. regard Jamil . /opt/home/rep/.profile #!/bin/sh VALUE=`sqlplus -silent rep/Ndk38f7@dw <<END set pagesize 0 feedback off verify off heading off echo off select trunc(max(chg_dt)) from NOT_SCHEDULED_INSTALL; exit; END` VALUE2=`sqlplus -silent rep/Ndk38f7@dw <<END set pagesize 0 feedback off verify off heading off echo off select trunc(sysdate) from dual; exit; End` if [[ $VALUE -eq $VALUE2 ]]; then echo "No rows returned from database" exit 0 else echo $VALUE2 echo $VALUE fi |
|
||||
|
Oracle already has date arithmetic, ksh doesn't - use PL/SQL:
Code:
#!/bin/ksh
date_equal()
{
sqlplus -silent rep/Ndk38f7@dw <<END
set pagesize 0 feedback off verify off heading off echo off serverout on size 100000
DECLARE
date1 DATE:=NULL;
date2 DATE:=NULL;
BEGIN
DBMS_OUTPUT.enable(100000);
select trunc(max(chg_dt)) into date1 from NOT_SCHEDULED_INSTALL;
select trunc(sysdate) into date2 from dual;
IF date1 = date2
THEN
DBMS_OUTPUT.put_line('1');
ELSE
DBMS_OUTPUT.put_line('0');
END IF;
END;
/
exit;
END
}
if [[ $(date_equal) -eq 1 ]] ; then
# do something
else
# do something else
fi
|
|
||||
|
And Now for Something Different
I've used this before and it works pretty well.
Does a few different things with dates depending on the parameters. #! /usr/bin/ksh # datecalc -- Perderabo's date calculator # USAGE="\ datecalc -a year month day - year month day datecalc -a year month day [-|+] n datecalc -d year month day datecalc -D year month day datecalc -j year month day datecalc -j n datecalc -l year month use \"datecalc -help\" use for more documentation" DOCUMENTATION="\ datecalc Version 1.1 datecalc does many manipulations with dates. datecalc -a is for date arithmetic datecalc -d or -D converts a date to the day of week datecalc -j converts to date to or from julian day datecalc -l outputs the last day of a month All dates must be between the years 1860 and 3999. datecalc -a followed by 7 parameters will calculate the number of days between two dates. Parameters 2-4 and 6-8 must be dates in ymd form, and parameter 5 must be a minus sign. The output is an integer. Example: > datecalc -a 1960 12 31 - 1922 2 2 14212 datecalc -a followed by 5 parameters will calculate the a new date offset from a given date, Parameters 2-4 must be a date in ymd form, paramter 5 must be + or -, and paramter 6 must be an integer. Output is a new date. Example: > datecalc -a 1960 12 31 + 7 1961 1 7 datecalc -d followed by 3 parameters will convert a date to a day-of-week. Parameters 2-4 must be a date in ymd form. Example: > datecalc -d 1960 12 31 6 datecalc -D is like -d except it displays the name of the day. Example: > datecalc -D 1960 12 31 Saturday datecalc -j followed by 3 parameters will convert a date to Modified Julian Day number. Example: > datecalc -j 1960 12 31 37299 datecalc -j followed by a single parameter will convert a Modified Julian Day number to a date. Example: > datecalc -j 37299 1960 12 31 datecalc -l followed by year and month will output the last day of that month. Note that by checking the last day of February you can test for leap year. Example: > datecalc -l 2002 2 28" lastday() { integer year month leap # ja fe ma ap ma jn jl ag se oc no de set -A mlength xx 31 28 31 30 31 30 31 31 30 31 30 31 year=$1 if ((year<1860 || year> 3999)) ; then print -u2 year out of range return 1 fi month=$2 if ((month<1 || month> 12)) ; then print -u2 month out of range return 1 fi if ((month != 2)) ; then print ${mlength[month]} return 0 fi leap=0 if ((!(year%100))); then ((!(year%400))) && leap=1 else ((!(year%4))) && leap=1 fi feblength=28 ((leap)) && feblength=29 print $feblength return 0 } date2jd() { integer ijd day month year mnjd jd lday year=$1 month=$2 day=$3 lday=$(lastday $year $month) || exit $? if ((day<1 || day> lday)) ; then print -u2 day out of range return 1 fi ((standard_jd = day - 32075 + 1461 * (year + 4800 - (14 - month)/12)/4 + 367 * (month - 2 + (14 - month)/12*12)/12 - 3 * ((year + 4900 - (14 - month)/12)/100)/4)) ((jd = standard_jd-2400001)) print $jd return 0 } jd2dow() { integer jd dow numeric_mode set +A days Sunday Monday Tuesday Wednesday Thursday Friday Saturday numeric_mode=0 if [[ $1 = -n ]] ; then numeric_mode=1 shift fi jd=$1 if ((jd<1 || jd>782028)) ; then print -u2 julian day out of range return 1 fi ((dow=(jd+3)%7)) if ((numeric_mode)) ; then print $dow else print ${days[dow]} fi return } jd2date() { integer standard_jd temp1 temp2 jd year month day jd=$1 if ((jd<1 || jd>782028)) ; then print julian day out of range return 1 fi ((standard_jd=jd+2400001)) ((temp1 = standard_jd + 68569)) ((temp2 = 4*temp1/146097)) ((temp1 = temp1 - (146097 * temp2 + 3) / 4)) ((year = 4000 * (temp1 + 1) / 1461001)) ((temp1 = temp1 - 1461 * year/4 + 31)) ((month = 80 * temp1 / 2447)) ((day = temp1 - 2447 * month / 80)) ((temp1 = month / 11)) ((month = month + 2 - 12 * temp1)) ((year = 100 * (temp2 - 49) + year + temp1)) print $year $month $day return 0 } # # Parse parameters and get to work. case $1 in -a) if (($# == 8)) ; then if [[ $5 != - ]] ; then print -u2 - "$USAGE" exit 1 fi jd1=$(date2jd $2 $3 $4) || exit $? jd2=$(date2jd $6 $7 $8) || exit $? ((jd3=jd1-jd2)) print $jd3 exit 0 elif (($# == 6)) ; then jd1=$(date2jd $2 $3 $4) || exit $? case $5 in -|+) eval '(('jd2=${jd1}${5}${6}'))' jd2date $jd2 exit $? ;; *) print -u2 - "$USAGE" exit 1 ;; esac fi ;; -d|-D) if (($# != 4)) ; then print -u2 - "$USAGE" exit 1 fi jd1=$(date2jd $2 $3 $4) || exit $? numeric=-n [[ $1 = -D ]] && numeric="" eval jd2dow $numeric $jd1 exit $? ;; -j) if (($# == 4)) ; then date2jd $2 $3 $4 exit $? elif (($# == 2)) ; then jd2date $2 $3 $4 exit $? else print -u2 - "$USAGE" exit 1 fi ;; -l) if (($# == 3)) ; then lastday $2 $3 exit $? else print -u2 - "$USAGE" exit 1 fi ;; -help) print - "$USAGE" print "" print - "$DOCUMENTATION" exit 0 ;; *) print -u2 - "$USAGE" exit 0 ;; esac #not reached exit 7 |
|
||||
|
Another way would be:
Code:
#!/usr/bin/ksh RET=`sqlplus -silent rep/Ndk38f7@dw <<END set pagesize 0 feedback off verify off heading off echo off select decode(d1,d2,'No rows',to_char(d1)||' '||to_char(d2)) from (select trunc(max(chg_dt)) d1 from NOT_SCHEDULED_INSTALL), (select trunc(sysdate) d2 from dual); exit; END` if [[ "$RET" = "No rows" ]] ; then # do something else # do something else fi |
|
||||
|
unix script
I need a little change in this script.
I need when the date is less then sysdate it sleep for 1 houre otherwise it run my abc.sh script. thanks Jamil |
| Sponsored Links | ||
|
|