dupla számjegy

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

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.

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.

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