Egy bash szkriptben megadok egy "hónap, nap, óra, perc" egyedi dátumot.
A szkriptben mindegyik adatnak van egy változója $month, $day stb.
Össze kellene vetnem csak az aktuális hónap, nappal.
actualmonth=$(date +%m)
actualday=$(date +%d)
Hogyan tudnám összehasonlítani egyszerűen?
Ha a "hónap,nap" egyezik, akkor végre kell hajtani egy utasítást. Ha nem, akkor nem.
Én csak egyesével tudom összehasonlítani az "if-then-else" segítségével. Van esetleg egyszerűbb megoldás is?
- 745 megtekintés
Hozzászólások
Ha a "hónap,nap" egyezik, akkor végre kell hajtani egy utasítást. Ha nem, akkor nem.
Gondolom, akkor az óra, perc nem kell.
Ha más nem:
actualmonthday=$(date +%m%d)
[ "$month$day" = "$actualmonthday" ] && végrehajtandó_utasítás
Persze a "vezető nullák" legyenek, tehát a február hónap praktikus, ha 02 módon van megadva (konvertálva).
De ha épp FreeBSD-féle date-t használsz: date -v-$((month-1))m -v-$((day-1))d +%m%d
értéke 0101, ha a hónap-nap egyezik. Biztosan van valami ilyesmi megoldás a GNU-féle date-ban is.
- A hozzászóláshoz be kell jelentkezni
Igen közben én is ugyanerre jutottam, de több szem többet lát...
Mindenesetre köszi.
- A hozzászóláshoz be kell jelentkezni
[ "$month$day" = "$actualmonthday" ]
Az = az string-osszehasonlitas, neked az -eq a baratod:
[ 01 -eq 1 ] && echo "Equal."
Equal.
[ "01" = "1" ] && echo "Equal."
- A hozzászóláshoz be kell jelentkezni
Az = az string-osszehasonlitas,
Tudom, szándékos volt.
Azért kellenek vezető nullák, hogy pl. az 111 (január 11., november 1.) ne legyen kétértelmű, azaz a teszt úgy működjön, ahogy a topiknyitó szeretné - ekkor a -eq
is jó(nak tűnik). Természetesen az összehasonlítás úgy is megoldható, hogy valamilyen elválasztókaraktert használ a hónap és a nap elválasztására - ekkor viszont csak a sztring-összehasonlítás a jó.
- A hozzászóláshoz be kell jelentkezni
[ -z ${actualmonthday##${monthday}} ] && ugyanaz
... lol
- A hozzászóláshoz be kell jelentkezni
Ötletes :)
- A hozzászóláshoz be kell jelentkezni
Csak nagyon halkan szólok... ha ezt így csinálod:
actualmonth=$(date +%m)
actualday=$(date +%d)
akkor abban van ám egy kis race condition. Ha a szkripted épp akkor fut, amikor január 31-ről február 1-re vált a dátum, lehet hogy január 1-e lesz eltárolva ebben a két változóban, ahhoz hasonlítod a másik értéket.
- A hozzászóláshoz be kell jelentkezni