Strona 1 z 1

[bash] Sprawdzanie, czy znak występuje w ciągu

: 24 maja 2010, 21:49
autor: tutsii
Witam,
mam za zadanie sprawdzić, czy w danym ciągu zapisanym w zmiennej znajduje się wybrany znak.
Dokładniej chodzi o sprawdzenie, czy w podanym przez użytkownika emailu znajduje się @. Próbowałam to zrobić za pomocą grep, ale z tego, co wyczytałam działa on na plikach więć trochę to mija się z celem.
Da się to zrobić jakoś prościej?

Odp: [bash] Sprawdzanie, czy znak występuje w ciągu

: 24 maja 2010, 21:56
autor: sulti
grep tak samo potrafi parsować STDIN:

Kod: Zaznacz cały

#!/bin/bash
email="user@domena.com"
if [ `echo $email | grep -c "@"` -eq 1 ]; then
 echo "Email OK"
else
 echo "Email NOT OK"
fi
grep -c podaje liczbę wystąpień wzorca w parsowanych liniach.

Odp: [bash] Sprawdzanie, czy znak występuje w ciągu

: 24 maja 2010, 22:30
autor: tutsii
Dziękuję bardzo :)

Odp: [bash] Sprawdzanie, czy znak występuje w ciągu

: 24 maja 2010, 22:31
autor: beluosus
W sumie wystarczy:

Kod: Zaznacz cały

email="asdf@asdf"
echo $email | grep -q "@" && echo "Dobry" || echo "Zly"
Jeśli grep nie znajdzie wzorca to zwraca 0 (w sensie $?, a nie wydruk programu - żeby nie było niejasności).

Odp: [bash] Sprawdzanie, czy znak występuje w ciągu

: 24 maja 2010, 22:35
autor: azhag
Owszem, grep może też operować na standardowym wejściu, jednakże liczenie linii wyjścia to nie jest dobre podejście. Prawidłowo wygląda to tak:

Kod: Zaznacz cały

if echo $ADRES | grep -q "@"; then
    echo "adres poprawny"
else
    echo "adres błędny"
fi
Operuj kodami wyjścia. (w szczegóły wprowadzi Cię Minio: http://minio.jogger.pl/2009/11/21/popul ... w-powloki/)

Nawiasem mówiąc na miejscu autorki sprawdziłbym poprawność za pomocą wyrażenia regularnego, żeby od razu odsiać te adresy, ktore wprawdzie @ zawierają, jednak z innego powodu są błędne.