Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: yes/no Скрипт


  • Subject: Re: lug-bg: yes/no Скрипт
  • From: Georgi Genov <ggenov@xxxxxxxxxxx>
  • Date: Fri, 08 Oct 2004 10:44:37 +0300

Peter Pentchev wrote:

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' ]  ? :)

Да видим сега какво имам предвид с това с кавичките:


[roam@straylight ~]> cat > foo.sh
#!/bin/sh

read answer
if [ $answer = 'Y' ]; then
  echo 'Yuppie yay!'
fi
[roam@straylight ~]> sh foo.sh
Y
Yuppie yay!
[roam@straylight ~]> sh foo.sh
N
[roam@straylight ~]>

Дотук добре, разпознава 'Y', не разпознава 'N'.  Сега обаче...

[roam@straylight ~]> sh foo.sh
yuppity yup
[: yuppity: unexpected operator
[roam@straylight ~]>

Тук май нещо се счупи :)  А я да видим какво можем да направим с test?

[roam@straylight ~]> sh foo.sh
1 = 1 -o N
Yuppie yay!
[roam@straylight ~]>

Ухаааа... съвсем го шашнах :)  А нещо друго?

[roam@straylight ~]> sh foo.sh
-f /etc/istheresuchafile -o N
[roam@straylight ~]> sh foo.sh
-f /etc/passwd -o N
Yuppie yay!
[roam@straylight ~]>

Ето как с малко невнимание можем да пуснем някой да се разхожда из
системата и да събира информация, която не му се полага :)

  case "$answer" in

Аааааа така - за това става дума.  Навсякъде, където използваш $answer,
го слагай в кавички, да не стават грешки - освен ако, разбира се, не
искаш наистина да го интерпретираш така, с интервалите, които може да
съдържа.

      [Yy]*)
          result Yes
          break
          ;;

А това пък е правилният начин да провериш дали нещо започва с Y или y,
горният вариант с if [ "$answer" = '[Yy]' ] просто няма да работи.

Поздрави,
Петър

Хаха :) .... ето един вече се подразни.
Нали това дето съм го написал работи !
Какъв е проблема да гледаш хипотетично?

АКо нямало било кавички ? Ми то може въобще да няма echo "nekva prostotiq". То даже само по себеси няма смисъл да пише по добре да прави. Това е само за визуализация а и според теб как би могло да изведе друг отговор $1 след като така или инъче възможните отговори са Yes No Other Default. Разбрах проблема е, че работи нещо което, спред теб не би трябвало :). Ми това е силата в програмиранет понякога нещата работят по подразбиране. И не следват никакеа логика :). За да си спокоен реда

while [ ! $answer = [yY] ] & [ ! $answer = [nN] ]; do
го заменям с

а="егати"
while [ $а = "егати" ]; do


============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================



 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.