![]() |
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| UNIX for Dummies Frågor & Svar Om du inte är säker på var att skriva en UNIX eller Linux fråga efter det här. Alla UNIX-och Linux-nybörjare välkomna! |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Jämför dag från DB2 tabellen till gårdagens Unix systemdatumet | sasaliasim | Shell-programmering och Skript | 9 | 12-01-2008 11:37 |
| Hämta datum och tid för tidigare 1 timme från dagens datum | spch2o | Shell-programmering och Skript | 5 | 08-29-2008 04:32 |
| Behandling en loggfil baserat på datum och tid för input och datum och tid på loggfilen | snygga | Shell-programmering och Skript | 4 | 03-16-2008 11:23 |
| jämföra datum med datum i filen | siog | UNIX for Dummies Frågor & Svar | 2 | 10-04-2006 12:10 |
| jämföra dagens datum med datum i en fil | siog | UNIX for Dummies Frågor & Svar | 4 | 10-04-2006 11:55 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
Jämför Datum och tid
Hej
kan någon sända jag koden för att jämföra två datum och köra ett shell script. Följande är den kod som jag actully vill men jag får fel. anse Jamil . / opt / home / rep / .profile #! / bin / sh VALUE \u003d `sqlplus ljudlös rep/Ndk38f7 @ dw <<END uppsättning pageSize 0 kommentarer off kontrollera bort rubriken off echo off Välj TRUNC (max (chg_dt)) från NOT_SCHEDULED_INSTALL; exit; Slut " Värde2 \u003d `sqlplus ljudlös rep/Ndk38f7 @ dw <<END uppsättning pageSize 0 kommentarer off kontrollera bort rubriken off echo off Välj TRUNC (SYSDATE) från dubbla; exit; End " if [[$ value-eq $ värde2]]; sedan echo "No rader återvände från databas" exit 0 annan echo $ värde2 echo $ value fi |
|
||||
|
Oracle har redan datum aritmetik, inte ksh inte - använda PL / SQL:
Kod:
#!/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
|
|
||||
|
Och nu något annorlunda
Jag har använt det förut och det fungerar ganska bra.
Har ett par olika saker med datum beroende på parametrar. #! / usr / bin / ksh # Datecalc - Perderabo's date calculator # USAGE \u003d "\ datecalc-ett år månad dag - år månad dag datecalc-ett år månad dag [-|+] n datecalc-d år månad dag datecalc-D år månad dag datecalc-j år månad dag datecalc-jn datecalc-l år månad använda \ "datecalc-help \" för användning av mer dokumentation " DOKUMENTATION \u003d "\ datecalc Version 1.1 datecalc gör många manipulationer med datum. datecalc-en är för datum aritmetiska datecalc-d eller-D konverterar ett datum för veckodagen datecalc-j konverterar hittills till eller från julian dag datecalc-l utgångar den sista dagen i en månad Alla datum måste vara mellan åren 1860 och 3999. datecalc-a följt av 7 parametrar beräknar antalet dagar mellan två datum. Parametrar 2-4 och 6-8 måste datum i Ymd form, och parameter 5 skall vara ett minus sign. Resultatet är ett heltal. Exempel: > Datecalc-en 1960 12 31 - 1922 2 2 14212 datecalc-a följt av 5 parametrar beräknar en ny dag avstånd från ett visst datum, Parameters 2-4 måste vara ett datum i Ymd form, måste parameter 5 vara + eller -, och parameter 6 måste vara ett heltal. Produktionen är ett nytt datum. Exempel: > Datecalc-en 1960 12 31 + 7 1961 1 7 datecalc-d följt av 3 parametrar kommer att konvertera ett datum till en dag-för-vecka. Parametrar 2-4 måste vara ett datum i Ymd form. Exempel: > Datecalc-d 1960 12 31 6 datecalc-D är lik-d förutom att det visar namnet på dagen. Exempel: > Datecalc-D 1960 12 31 Lördag datecalc-j följt av 3 parametrar kommer att konvertera ett datum att Modified Julian Day nummer. Exempel: > Datecalc-J 1960 12 31 37299 datecalc-j följt av en enda parameter kommer att konvertera en Modified Julian Day nummer till ett datum. Exempel: > Datecalc-j 37.299 1960 12 31 datecalc-l följd av år och månad kommer att skriva ut den sista dagen i angiven månad. Observera att genom att markera den sista dagen i Februari du kan testa för skottår. Exempel: > Datecalc-l 2002 2 28 " lastday () ( heltal år månad språng # 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 år \u003d $ 1 if ((year <1860 | | år> 3999)), sedan print-U2 år utom räckhåll avkastning 1 fi månad \u003d $ 2 if ((månad <1 | | månad> 12)), sedan print-U2 månad out of range avkastning 1 fi if ((månad! \u003d 2)), sedan print $ (mlength [månad]) return 0 fi språng \u003d 0 if ((! (år% 100))) och sedan ((! (år% 400))) & & språng \u003d 1 annan ((! (år% 4))) & & språng \u003d 1 fi feblength \u003d 28 ((hopp)) & & feblength \u003d 29 print $ feblength return 0 ) date2jd () ( heltal ijd dag månad år mnjd jd Lday år \u003d $ 1 månad \u003d $ 2 dag \u003d $ 3 Lday \u003d $ (lastday $ år $ månad) | | exit $? if ((dag <1 | | dag> Lday)), sedan print-U2 day out of range avkastning 1 fi ((standard_jd \u003d dag - 32075 + 1461 * (år + 4800 - (14 - månad) / 12) / 4 + 367 * (månad - 2 + (14 - månad) / 12 * 12) / 12 - 3 * ((år + 4900 - (14 - månad) / 12) / 100) / 4)) ((jd \u003d standard_jd-2400001)) print $ jd return 0 ) jd2dow () ( heltal jd dow numeric_mode SET + A dagar Söndag Måndag Tisdag Onsdag Torsdag Fredag Lördag numeric_mode \u003d 0 if [[$ 1 \u003d-n]]; sedan numeric_mode \u003d 1 växla fi jd \u003d $ 1 if ((jd <1 | | jd> 782028)), sedan print-u2 Julian day out of range avkastning 1 fi ((dow \u003d (jd 3)% 7)) if ((numeric_mode)), sedan print $ dow annan print $ (dagar [dow]) fi återgå ) jd2date () ( heltal standard_jd Temp1 Temp2 jd år månad dag jd \u003d $ 1 if ((jd <1 | | jd> 782028)), sedan utskrift Julian day out of range avkastning 1 fi ((standard_jd \u003d jd +2400001)) ((Temp1 \u003d standard_jd + 68569)) ((Temp2 \u003d 4 * temp1/146097)) ((Temp1 \u003d Temp1 - (146097 * Temp2 + 3) / 4)) ((år \u003d 4000 * (Temp1 + 1) / 1461001)) ((Temp1 \u003d Temp1 - 1461 * år / 4 + 31)) ((month \u003d 80 * Temp1 / 2447)) ((dag \u003d Temp1 - 2447 * månad / 80)) ((Temp1 \u003d månad / 11)) ((månad \u003d månad + 2 - 12 * Temp1)) ((år \u003d 100 * (Temp2 - 49) + år + Temp1)) print $ år $ $ månad dag return 0 ) # # Parse parametrar och få att fungera. gäller $ 1 i -a) if (($ # \u003d\u003d 8)), sedan if [[$ 5! \u003d -]]; sedan print-U2 - "$ USAGE" exit 1 fi JD1 \u003d $ (date2jd $ 2 $ 3 $ 4) | | exit $? JD2 \u003d $ (date2jd $ 6 $ 7 $ 8) | | exit $? ((jd3 \u003d JD1-JD2)) print $ jd3 exit 0 Elif (($ # \u003d\u003d 6)), sedan JD1 \u003d $ (date2jd $ 2 $ 3 $ 4) | | exit $? fall 5 $ i - | +) Eval '((' JD2 \u003d $ (JD1) $ (5) $ (6 }'))' jd2date $ JD2 exit $? ;; *) print-U2 - "$ USAGE" exit 1 ;; ESAC fi ;; -d |-D) if (($ #! \u003d 4)), sedan print-U2 - "$ USAGE" exit 1 fi JD1 \u003d $ (date2jd $ 2 $ 3 $ 4) | | exit $? numerisk \u003d- n [[$ 1 \u003d-D]] & & numerisk \u003d "" eval jd2dow $ numerisk $ JD1 exit $? ;; -j) if (($ # \u003d\u003d 4)), sedan date2jd $ 2 $ 3 $ 4 exit $? Elif (($ # \u003d\u003d 2)), sedan jd2date $ 2 $ 3 $ 4 exit $? annan print-U2 - "$ USAGE" exit 1 fi ;; -l) if (($ # \u003d\u003d 3)), sedan lastday $ 2 $ 3 exit $? annan print-U2 - "$ USAGE" exit 1 fi ;; -help) print - "$ USAGE" print "" print - "$ DOKUMENTATION" exit 0 ;; *) Print-U2 - "$ USAGE" exit 0 ;; ESAC # inte nått exit 7 |
|
||||
|
Ett annat sätt skulle vara:
Kod:
#!/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 |