Portál AbcLinuxu, 12. května 2025 07:53

Dotaz: Je vstup číslo nebo *?

14.5.2011 11:24 Pepa
Je vstup číslo nebo *?
Přečteno: 379×
Odpovědět | Admin
Ahoj, řeším problém. chtěl bych ošetřit, zda je vstup číslo nebo znak *... Hledal jsem a téměř vše ,co jsem našel mi nešlo

Tohle jsem našel tu, nefunguje:
[[ ${vstup} =~ "^[+-]?[0-9]+$" ]] && echo "$vstup je cislo" || echo "$vstup neni cislo"
Vůbec to ošetření vstupu ,zda je číslo...
if [ "$value" -gt "0" -a "$value" -lt "23" ] || [ "$value" = "*" ]; then,
tohle mi funguje, ale v připadě stringu to sice vyhodnotí správně, ale vyhodí to chybu ilegall number.. co stím?Díky
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jakub Lucký avatar 14.5.2011 11:33 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Odpovědět | | Sbalit | Link | Blokovat | Admin
if [ "$value" = "*" ] || [ "$value" -gt "0" -a "$value" -lt "23" ];then ...

Tohle v Bashi funguje bez problémů...
If you understand, things are just as they are; if you do not understand, things are just as they are.
14.5.2011 11:51 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
ano, ale cokoliv jiného, než to vypíše
[: 25: Illegal number:
14.5.2011 12:16 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Co konkrétně jste zkoušel?
Jakub Lucký avatar 14.5.2011 15:01 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
No, já myslel spojit oba dva řádky, co tam máte, tedy:
if [[ ${vstup} =~ "^[+-]?[0-9*]+$" ]];then
    if [ "$value" = "*" ] || [ "$value" -gt "0" -a "$value" -lt "23" ];then
        echo "Vstup OK"
fi;
Ale myslím, že níže vám někdo nabídne lepší řešení...
If you understand, things are just as they are; if you do not understand, things are just as they are.
15.5.2011 12:34 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Konkrétně tohle
if [[ ${vstup} =~ "^[+-]?[0-9*]+$" ]];then
mi nefunguje,netuším proč
14.5.2011 12:03 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?

Případně rovnou

  if [ "$value" = "*" -o "$value" -gt "0" -a "$value" -lt "23" ]; then
15.5.2011 14:29 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
V bash 4.1.9(2)) mi to hází chybu, připadá mi že mu při vyhodnocování vadí fakt, že by byla hodnota mohla být číslo (ke kterému se váží -gt a -lt) i řetězec (porovnávaný =). Novější [[ ]] fungují.
bash$ value=*
bash$ echo "$value"
*

bash$ if [ "$value" = "*" -o "$value" -gt "0" -a "$value" -lt "23" ]; then echo ok; fi
bash: [: *: integer expression expected

bash$ if [[ "$value" = "*" || "$value" -gt "0" || "$value" -lt "23" ]]; then echo ok; fi
bash$ ok

bash$ if [ "$value" = "*" ]; then echo ok; elif [ "$value" -gt "0" -a "$value" -lt "23" ]; then echo ok; fi;
ok

Bilbo avatar 14.5.2011 13:15 Bilbo | skóre: 29
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Nemělo by to "*" být v jednoduchých uvozovkách? Takhle to může bash expandovat na seznam všech souborů v aktuálním adresáři :)

Nějak takhle: if [ "$value" = '*' ] || [ "$value" -gt "0" -a "$value" -lt "23" ];then ...
Big brother is not watching you anymore. Big Brother is telling you how to live...
14.5.2011 14:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Nemusí. Nemůže.
14.5.2011 12:15 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně toto funguje

[user@srv ~]$ if [[ 2443 =~ ^[0-9]+$ ]]; then echo OK; else echo NO; fi
OK
[user@srv ~]$ if [[ 2A443 =~ ^[0-9]+$ ]]; then echo OK; else echo NO; fi
NO
Netvrdím to, ale možná je to pravda.
14.5.2011 12:26 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Případně i toto

if [[ 2443 =~ ^[+-]?[0-9]+$ ]]; then echo OK; else echo NO; fi
Netvrdím to, ale možná je to pravda.
David Watzke avatar 14.5.2011 12:27 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Tak si ten regex zkus dát do uvozovek. Problém je, že v jedný verzi bashe to šlo dobře a pak se to chování zase změnilo. Je to pěkně na hlavu...
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
14.5.2011 12:32 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
[user@srv ~]$ bash -version
GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
[user@srv ~]$ if [[ 2443 =~ "^[+-]?[0-9]+$" ]]; then echo OK; else echo NO; fi
OK
[user@srv ~]$ if [[ 24A43 =~ "^[+-]?[0-9]+$" ]]; then echo OK; else echo NO; fi
NO


No tak nevím, mě to funguje s uvozovkama i bez.
Netvrdím to, ale možná je to pravda.
David Watzke avatar 14.5.2011 13:21 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Právě proto, že máš pravěkou verzi Bashe, ve který to ještě šlo.
dave@amd64 ~ $ if [[ 2443 =~ ^[0-9]+$ ]]; then echo OK; else echo NO; fi
OK
dave@amd64 ~ $ if [[ 2443 =~ "^[0-9]+$" ]]; then echo OK; else echo NO; fi
NO
dave@amd64 ~ $ bash --version
GNU bash, verze 4.2.10(2)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl.html>

Toto je svobodné programové vybavení: máte právo jej měnit a šířit.
VEŠKERÉ ZÁRUKY chybí, jak jen zákon dovoluje.
Myslím, že se to podělalo ve verzi 3.1 nebo 3.2.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
14.5.2011 13:58 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
funguje, ale nechápu ten výraz, jak to zapsat tak, aby to bralo včetně "*" .Díky
14.5.2011 14:04 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
ne, tak zpět, v terminálu funguje, ve scriptu ne
14.5.2011 14:08 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
GNU bash, verze 4.1.5(1)-release (x86_64-pc-linux-gnu)
Copyright © 2009 Free Software Foundation, Inc.
Licence GPLv3+: GNU GPL verze 3 nebo novější http://gnu.org/licenses/gpl.html

Toto je svobodné programové vybavení: máte právo jej měnit a šířit.
VEŠKERÉ ZÁRUKY chybí, jak jen zákon dovoluje.
David Watzke avatar 14.5.2011 14:22 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Určitě to není nějakým překlepem?
dave@amd64 /tmp $ if [[ 2443 =~ ^[0-9]+$ ]]; then echo OK; else echo NO; fi
OK
dave@amd64 /tmp $ echo 'if [[ 2443 =~ ^[0-9]+$ ]]; then echo OK; else echo NO; fi' > x
dave@amd64 /tmp $ bash x
OK
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
14.5.2011 14:40 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
read value
			if [[ $value =~ ^[0-9]+$ ]]; then
				echo true
			else
                                echo false
			fi
19: [[: not found
David Watzke avatar 14.5.2011 14:51 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Tak to nechápu, protože tohle mi funguje správně jak v terminálu, tak ve skriptu.
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
Jakub Lucký avatar 14.5.2011 15:02 Jakub Lucký | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Nepoužíváte náhodou ve skriptu /bin/sh, který je nalinkovaný jinam, než je /bin/bash ?
If you understand, things are just as they are; if you do not understand, things are just as they are.
14.5.2011 15:15 Pepa
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Nevím, co tím myslíte, používám Ubuntu, default, nic zásadního jsem neměnil
David Watzke avatar 14.5.2011 15:42 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Jako první řádek ve skriptu uveďte #!/bin/bash, přidejte mu právo ke spuštění (chmod +x skript) a spusťte jej (./skript).
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
frEon avatar 15.5.2011 16:32 frEon | skóre: 40 | Praha
Rozbalit Rozbalit vše Re: Je vstup číslo nebo *?
Odpovědět | | Sbalit | Link | Blokovat | Admin
ahoj, jestli je $value cislo otestujes treba takto:
kleptor@aine:/tmp$ value=666
kleptor@aine:/tmp$ expr 1 + $value &> /dev/null && echo "je cislo" || echo "neni cislo"
je cislo
kleptor@aine:/tmp$ value=blabla
kleptor@aine:/tmp$ expr 1 + $value &> /dev/null && echo "je cislo" || echo "neni cislo"
neni cislo
Talking about music is like dancing to architecture.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.