Eljutottam odáig, hogy egy lekérdezés, ellenőrzést is végez. A probléma ott van hogy a 06 helyett elfogadja a 6-ot is amit viszont nem kéne. Csakis nn formában kellene elfogadnia az adatokat.
Mi hiányzik? Már fáradt vagyok.
#!/bin/bash
number_control() {
regex="^[0-9][0-9]*$"
if [[ ${control} =~ ${regex} && $((10#${control})) -ge ${start} && $((10#${control})) -le ${end} ]]; then
if [[ ! -z ${control} ]]; then
# control="$((10#${control}))"
control="${control}"
fi
else error="1"
fi
}
seven_day() {
regex="^[1-7]{1}$|^[1-7]{1}-[1-7]{1}$|^\*$"
match_HN=$(echo "${HN}" | egrep ${regex})
if [ $? -eq 0 ];then
if [ ${#match_HN} -ne 1 ]; then
from="${match_HN:0:1}"; to="${match_HN:2:1}"
if [ ${to} -le ${from} ]; then
error="1"
fi
fi
else error="1"
fi
}
error_level() {
if [ ${error} -eq 0 ]; then
printf "Minden adat jó. \n"
break
else printf "HIBA \n"
fi
}
clear
while true; do
error="0"
printf "Add meg az adatokat szóközzel! (HH NN ÓÓ PP): "
read HH NN OO PP || break
start="1"; end="12"; control="${HH}"; number_control; HH="${control}" # month_control
start="1"; end="31"; control="${NN}"; number_control; NN="${control}" # day_control
start="0"; end="23"; control="${OO}"; number_control; OO="${control}" # hour_control
start="0"; end="59"; control="${PP}"; number_control; PP="${control}" # minute_control
error_level
done
echo HH - $HH
echo NN - $NN
echo OO - $OO
echo PP - $PP
- 1045 megtekintés
Hozzászólások
"Mi hiányzik?"
Inkább mivel van több. :)
A number_control függvény regex változójának értékében egy csillaggal.
- A hozzászóláshoz be kell jelentkezni
Ohh a csillag az kell, mert ez egy crontab beíráshoz való részlet.
Tehát a bemenő érték lehet akár ilyen is:
read HN OO PP (HN=hét napja OO=óra PP=perc)
2 16 30 vagy
1-5 17 30 vagy
* 18 30
Ha nem ismétlődő dolog lesz, akkor kell az AT-nek átadni a dolgot, ekkor
read HH NN OO PP (hónap, nap, óra, perc)
De az AT nem fogad el 8:9 /11/23/2010-es értéket
csak 08:09 /11/23/2010-es értéket
Az ellenőrzés meg emiatt lett ilyen.
Így összesen 5 érték definiálódhat, de az sem egyszerre. Viszont egy ellenőrző rutinon megy át mind a két esetben.
- A hozzászóláshoz be kell jelentkezni
A csillagot akkor escapeld, ha konkretan "*" karakter kell neked.
Masreszt, lehet azt is csinalni, hogy elfogadod a 8-at (08) helyett, es te alakitod at ketjegyuve, elebiggyesztve egy 0-t. Pl printf-el:
HH=$(printf "%02d" ${HH})
- A hozzászóláshoz be kell jelentkezni
Hat ezt sem lattam meg ilyen bonyolultan megvalositva. Egyebkent amit stra mondott, az lesz a megoldasod.
De ha nem haragszol, adnek par tippet, mert borzasztoan nez ki a kodod, es nem csak azert mert hianyzik a formazas itt hupon:
1) shell functionnek lehet parametert adni, akkor nem kell kornyezeti valtozokkal szorakozni, es maris szebben nez ki igy:
HH=$(number_control 1 12 ${HH})
2) regexpek erre a celra agyuval verebre. shell glob is megteszi:
Pl:
case ${HH} in
[01][0-9]|2[0-4])
echo 00-24
;;
*)
# itt akkor most hiba van. ouch.
;;
esac
Szerintem ez egyszerubb & attekinthetobb mint a regexpes moka.
3) Hibat en rogton akkor dobnek amikor felmerul. Akkor nem kell error_level dologgal szorakozni (amit nem teljesen ertek, mert nem is olvastam el mit csinal :P), hanem rogton hanyatt veti magat a program es bevallja, hogy hat itt biza gond van. Megpedig ez-meg-ez.
Szvsz baratsagosabb. Es atlathatobb is, mert a hiba rogton ott jelentkezik, ahol elojon, nem valamikor kesobb.
Elso olvasatra ennyi bokte a csorom. :P
- A hozzászóláshoz be kell jelentkezni
A bash-ban meg talan valami linenumber valtozo is van, hogy hol tortent a baj.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni