Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: muhaha 15 Května 2011, 12:54:55

Název: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: muhaha 15 Května 2011, 12:54:55
Ahoj, pořád nemůžu vyřešit tento problém... Zkouším to tady takhle, ale bohužel to nefuguje, můžete mi prosím poradit funkční variantu,díky

Kód: [Vybrat]
read vstup

if [[ ${vstup} =~ "[0-9*]" ]];then

echo "cislo"

fi
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: pacholik 15 Května 2011, 14:13:34
funguje to jenom v bashi, a nesmí to bejt v uvozovkách
Kód: [Vybrat]
#!/bin/bash

read vstup
if [[ ${vstup} =~ ^[0-9*]$ ]]; then
echo "cislo"
fi
^ a $ znamenaj začátek a konec, takže platí jedna číslice nebo hvězdička
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: muhaha 15 Května 2011, 16:37:24
Díky, a když bych chtěl rozsah 0-23 ?, jak ten výraz upravit?
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: djlj 15 Května 2011, 16:47:44
Tak udělej podmínku, jestli je číslo větší nebo rovno nule a menší nebo rovno než 23.
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: muhaha 15 Května 2011, 17:06:50
to potom vypíše, že očekává celočíselný výraz, toho se chci vyvarovat...


Kód: [Vybrat]
if [[ ${vstup} =~ "^[0-9*]$" ]];then
    if [ "$value" = "*" ] || [ "$value" -gt "0" -a "$value" -lt "23" ];then
        echo "Vstup OK"
fi

O tohle mi jde... Pokud je to číslo, tak se teprve plní ta vnořená podmínka....  Ale hned u té první podmínky by neprošlo větší číslo, než 9...
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: GdH 15 Května 2011, 17:22:29
Pokud chceš zjistit, zda $vstup obsahuje pouze čísla, můžeš podmínku upravit takto:

if [[ $vstup =~ ^[0-9]*$ ]]; then echo "číslo"; fi

pak je jasné, že číslo nebude záporné a stačí ho testovat na < 23
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: muhaha 15 Května 2011, 17:47:07
Kód: [Vybrat]
if [[ $vstup =~ ^[0-9*]*$ ]]
Ještě jak to upravit tak, aby to prošlo jen v případě číslo a znak *?  Protože to vezme i prázdnou hodnotu

Takhle mi to funguje,ale je to mega prasárna:

Kód: [Vybrat]
v_hodina=

until [ "$v_hodina" = "0" ]; do
echo "zadej:0-23 nebo *"
read -p Hodina: hodina

if [ "$hodina" = "" ];then

clear
v_hodina=
echo "Spatny zapis"

else

if [[ $hodina =~ ^[0-9*]*$ ]]; then
if [ $hodina -lt "24" ]; then
clear
echo "dobre"
v_hodina=0
else
clear
echo "spatny zapis"
fi
fi

fi

done

Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: GdH 15 Května 2011, 17:55:12
Citace
echo "zadej:0-23 nebo *"

Dal jsem ti podmínku, kterou neprojde nic jiného, než číslo, které můžeš otestovat, zda je v povoleném rozsahu. Pokud to číslo není, můžeš to otestovat na '*', jinak vyhodit chybu.
Název: Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
Přispěvatel: PhoeniX36 16 Května 2011, 17:48:27
jestli to má reagovat na celá čísla, 0~23 tak bych to udělal přez switch ...