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?

Attachment: pgp95FoTywwRL.pgp
Description: PGP signature

  • ... Peter Pentchev
    • ... Georgi Genov
      • ... Peter Pentchev
        • ... Andrey Andreev
        • ... =?UTF-8?Q?Boris_Jordanov_?= =?UTF-8?Q?/_=D0=91=D0=BE=D1=80=D0=B8=D1=81_?= =?UTF-8?Q?=D0=99=D0=BE=D1=80=D0=B4=D0=B0=D0=BD=D0=BE=D0=B2?=
      • ... =?windows-1251?Q?=CE=E3=ED=FF=ED_=CA=F3=EB=E5=E2?=

Reply via email to