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
-
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
read vstup
if [[ ${vstup} =~ "[0-9*]" ]];then
echo "cislo"
fi
-
funguje to jenom v bashi, a nesmí to bejt v uvozovkách
#!/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
-
Díky, a když bych chtěl rozsah 0-23 ?, jak ten výraz upravit?
-
Tak udělej podmínku, jestli je číslo větší nebo rovno nule a menší nebo rovno než 23.
-
to potom vypíše, že očekává celočíselný výraz, toho se chci vyvarovat...
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...
-
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
-
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:
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
-
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.
-
jestli to má reagovat na celá čísla, 0~23 tak bych to udělal přez switch ...