On Thu, Oct 07, 2004 at 04:13:22PM +0300, Georgi Genov wrote:
> за да не дразня програмистите ще се корегирам :)
>
> #!/bin/sh
>
> read_answer() {
> echo -n "Please enter [y,Y] or [n,N] "
> read answer
> }
>
> result() {
> echo $1
> if [ ! $1 = "Other" ]; thenМежду другото, само като идейка: в shell scripting понякога е добра идея да слагаш "" около променливи, за които не си съвсем сигурен какво точно ще ти бъде подадено. Малка демонстрацийка малко по-долу... > exit 0 > fi > } > > read_answer > while [ ! $answer = [yY] ] & [ ! $answer = [nN] ]; do Ъъъъъ... като оставим настрана това с кавичките, това почти няма шанс да работи... Като начало, това & трябва да бъде &&, защото & няма да направи логически 'и', ами ще background-не първия test, и не е ясно точно какво ще се случи после :) А иначе [ ] a.k.a. test май в никоя реализация, до която мога да се докопам сега, не може да се справи с конструкция от типа нещо = [character class]; може би имаш предвид if [ `expr "$answer" : '[Yy]'` = '0' ] ? :) Да видим сега какво имам предвид с това с кавичките: [EMAIL PROTECTED] ~]> cat > foo.sh #!/bin/sh read answer if [ $answer = 'Y' ]; then echo 'Yuppie yay!' fi [EMAIL PROTECTED] ~]> sh foo.sh Y Yuppie yay! [EMAIL PROTECTED] ~]> sh foo.sh N [EMAIL PROTECTED] ~]> Дотук добре, разпознава 'Y', не разпознава 'N'. Сега обаче... [EMAIL PROTECTED] ~]> sh foo.sh yuppity yup [: yuppity: unexpected operator [EMAIL PROTECTED] ~]> Тук май нещо се счупи :) А я да видим какво можем да направим с test? [EMAIL PROTECTED] ~]> sh foo.sh 1 = 1 -o N Yuppie yay! [EMAIL PROTECTED] ~]> Ухаааа... съвсем го шашнах :) А нещо друго? [EMAIL PROTECTED] ~]> sh foo.sh -f /etc/istheresuchafile -o N [EMAIL PROTECTED] ~]> sh foo.sh -f /etc/passwd -o N Yuppie yay! [EMAIL PROTECTED] ~]> Ето как с малко невнимание можем да пуснем някой да се разхожда из системата и да събира информация, която не му се полага :) > case "$answer" in Аааааа така - за това става дума. Навсякъде, където използваш $answer, го слагай в кавички, да не стават грешки - освен ако, разбира се, не искаш наистина да го интерпретираш така, с интервалите, които може да съдържа. > [Yy]*) > result Yes > break > ;; А това пък е правилният начин да провериш дали нещо започва с Y или y, горният вариант с if [ "$answer" = '[Yy]' ] просто няма да работи. Поздрави, Петър -- Peter Pentchev [EMAIL PROTECTED] [EMAIL PROTECTED] [EMAIL PROTECTED] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint FDBA FD79 C26F 3C51 C95E DF9E ED18 B68D 1619 4553 Hey, out there - is it *you* reading me, or is it someone else?
pgp95FoTywwRL.pgp
Description: PGP signature
