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

 

начало

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

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

семинари ...

документи

как да ...

 

 

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

Re: lug-bg: Сраваняване на 2 променливи в баш


  • Subject: Re: lug-bg: Сраваняване на 2 променливи в баш
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Thu, 3 Feb 2005 12:06:25 +0200

On Thu, Feb 03, 2005 at 11:45:01AM +0200, Martin Kolev wrote:
> 
> Здравейте, 
> 
> Опитвам се с помощта на bash да срваня две променливи, но уви нешо ми
> убягва. Ето и скрипта който се опитвам да накарам да заработи:
> 
> #!/bin/bash
> 
> a=2390347223
> b=455455
> 
> c=`echo $a+$b|bc`

Това може да бъде подобрено по няколко начина :)

Ако си сигурен, че този скрипт ще бъде изпълняван винаги от bash, и
си силно против идеята да пишеш portable shell scripts, можеш да
направиш c=$(($a + $b)) с двойни скоби.  Всъщност е много вероятно това
да работи и на повечето реализации на ksh, добрият стар Korn shell, но
има много реализации на /bin/sh, при които няма да върви... so don't
do that.

Правилният начин да правиш изчисления в shell scripts е с изполване
на expr(1):

c  = `expr "$a" + "$b"`

...като тук интервалите между операндите са важни.

> if [ $c -gt $b ];

Тук от гледна точка на стил и изграждане на навици можеш да слагаш
кавички около променливите, макар че точно в този случай не е съвсем
задължително.  Всъщност... задължително е, защото стойността на 'c' е
получена от външната програма expr, която може и да не е /bin/expr, или
по някакъв друг начин да е била излъгана да извади нещо друго...
Та, да, аз бих го написал това като if [ "$c" -gt "$b" ];
> 	then
> echo "c e po-goliamo ot b"
> 	else
> echo "c e po-malko ot b"
> fi
> 
> 
> Проблема е, че резултата е вингаи по-малкия. Може ли някои по опитен от мен
> да ми отговори?

Това вече е странно.  Можеш ли да пробваш следното:

#!/bin/bash

echo "Proba s 'bc'"

a=2390347223
b=455455

c=`echo $a+$b|bc`
echo "a is $a, b is $b, c is $c"

if [ "$c" -gt "$b" ];
      then
echo "c e po-goliamo ot b"
      else
echo "c e po-malko ot b"
fi

echo "Proba s 'expr'"

a=2390347223
b=455455

c=`expr "$a" + "$b"`
echo "a is $a, b is $b, c is $c"

if [ "$c" -gt "$b" ];
      then
echo "c e po-goliamo ot b"
      else
echo "c e po-malko ot b"
fi


При мен на Debian Sarge това работи...

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

============================================================================
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.