Mój temat dotyczy basha na linuxie.
nie ograniam zbytnio basha i mam pytanie o prosty program
ma to byc skrypt w bashu przyjumący jako argomuent liczbę i sprawdzający, czy wprowadzone ciągi znaków na pewno są liczbami tzn. powinien akceptowac 23432 a 432r3 powinien odrzucic, czytałem że można to zrobić za pomocą GREP, czytałem o tym grepie ale nie wiem jak to wykorzystać.
Mógby ktos pomóc ?
Wiem tylko że do pierwszego argumentu odwołujemy się $1, nie wiem co dalej.
Przykład użycia (może niezbyt wydajny i pewnie da się lepszy, ale patrz):
read b
echo $b | grep [^0-9] > /dev/null
if [ $? -eq 0 ]
then
echo "WYSTEPUJA INNE ZNAKI NIZ LITERY"
fi
co oznacza "$?" oraz czemu /dev/null ? grep strumieniuje na /dev/null ale co i po co ?
a) $?
to jest kod błędu. W przypadku grepa 0 oznacza, że znaleziono dany ciąg (w tym przypadku "nie-cyfrę"), 1 informuje o jego nieznalezieniu, a 2, że wystąpił błąd (można te info znaleźć w necie lub w man
ie).
b) Po co zrobiłem strumień na /dev/null
? Bo gdy tego nie zrobię, to grep po prostu wypisze linię, w której znalazł wystąpienie "nie-cyfry". Można jednak zamiast tego użyć opcji -q
w grepie, dzięki której nic nie pójdzie do terminala. Wtedy ta linia będzie wyglądała tak:
echo $b | grep [^0-9] -q
Yhy rozumiem, dzięki że tak dokładnie wytumaczyłeś. Wytłumacz mi jeszcze czemu dałeś echo $b | grep, nie wystarczy samo "$b | grep..." ?
nie rozumiem czemu echo, po co coś wypisywać, ja chce tylko sprawdzić, oraz co oznacza "|" ?
thx
Sorry, że tak późno.
echo $b
Normalnie to wypisałoby wartość $b
, ale...
|
Które przekierowuje wyjście 1. programu na wejście 2. programu. Prościej mówiąc, to, co zostało wypisane przez echo $b
, zostaje przepisane na wejście dla komendy...
grep [^0-9] -q
Która już wiadomo co robi z tym wejściem.
dzięki , rozumiem
mam pytanie , czemu zamisat "|" nie powinnismy użyć ">" czyli strumieniujemu wyjscie echa na wejscie grepa ?