Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?  (Přečteno 1371 krát)

muhaha

  • Návštěvník
  • *
  • Příspěvků: 20
  • Karma: +0/-0
    • Zobrazit profil
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

pacholik

  • Závislák
  • ****
  • Příspěvků: 2072
  • Karma: +256/-16
    • Zobrazit profil
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #1 kdy: 15 Květen 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

muhaha

  • Návštěvník
  • *
  • Příspěvků: 20
  • Karma: +0/-0
    • Zobrazit profil
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #2 kdy: 15 Květen 2011, 16:37:24 »
Díky, a když bych chtěl rozsah 0-23 ?, jak ten výraz upravit?

djlj

  • Člen
  • **
  • Příspěvků: 134
  • Karma: +7/-3
    • Zobrazit profil
    • Italo.cz
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #3 kdy: 15 Květen 2011, 16:47:44 »
Tak udělej podmínku, jestli je číslo větší nebo rovno nule a menší nebo rovno než 23.

muhaha

  • Návštěvník
  • *
  • Příspěvků: 20
  • Karma: +0/-0
    • Zobrazit profil
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #4 kdy: 15 Květen 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...

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3045
  • Karma: +484/-17
    • Zobrazit profil
    • GdH-Notes
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #5 kdy: 15 Květen 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
« Poslední změna: 15 Květen 2011, 17:26:42 od GdH »

muhaha

  • Návštěvník
  • *
  • Příspěvků: 20
  • Karma: +0/-0
    • Zobrazit profil
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #6 kdy: 15 Květen 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

« Poslední změna: 15 Květen 2011, 17:51:53 od muhaha »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3045
  • Karma: +484/-17
    • Zobrazit profil
    • GdH-Notes
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #7 kdy: 15 Květen 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.

PhoeniX36

  • Návštěvník
  • *
  • Příspěvků: 49
  • Karma: +4/-1
  • "Ani linux není blbuvzdorný"
    • Zobrazit profil
Re: Jak rozeznat podminkou,jestli na vstupu je cislo nebo znak *?
« Odpověď #8 kdy: 16 Květen 2011, 17:48:27 »
jestli to má reagovat na celá čísla, 0~23 tak bych to udělal přez switch ...
Desktop:: MB: Asus P5KPL,CPU: Intel Pentium Dual-Core E5200 2.5GHz,GPU: ATI Radeon HD3650,RAM:2GB DRR2,HDD: SATAII 500GB,OS: Ubuntu 10.04LTS+WinXP na hry
NB:: MSI ER710X LinuxMint12(na zkoušku, jinak Ubuntu 10.04LTS)+WinXP na OrCad
oldNB::ACER TravelMate 230 WinXP+Lubuntu Tel:: ZTE Blade CM7-nightly