[LUGOS] Fakulteta v bash skripti?

Metod Kozelj metodk at gmail.com
Sat Mar 4 17:17:47 CET 2006


Howdy!

Matija Grabnar wrote:
> On Sat, Mar 04, 2006 at 12:19:44AM +0100, Toma? Toplak wrote:
>   
>> Za faks re??ujem enostavne naloge, ki jih je potrebno re??iti z bash
>> skripto. Zanima me, ce obstaja resitev racunanja fakultete, kjer
>> upoorabimo rekurzivni program, toraj da skripta kli??e sama sebe?
>> ??e lahko podam dva argumenta ./fakulteta.sh 5 1, potem je re??itev
>> enostavna, ne vem pa, kako bi to naredil samo z enim argumentom 
>> ./fakulteta.sh 5.
>>     
[snip]
>
> Ne mislis dovolj rekurzivno. V resnici stevca sploh ne potrebujes:
> #!/bin/bash
> if [ $1 -eq 0 ]
> then
>   echo 1
>   exit 0
> fi
> less=`expr $1 - 1`
> sub=`./fak.sh $less`
> facul=`expr $1 \* $sub`
> echo $facul
>   

Zgornji primer ni bashevski, deluje v vseh Bourne shellih, verjetno pa 
tudi v K shellih.

Lahko pa vse skupaj prepišemo v čisti bashizem - uporabimo notranjo 
bashovo aritmetiko, ki poleg vsega pospeši delovanje ker ni potrebno 
zaganjanje zunanjega programa (expr):

Torej takole:

#!/bin/bash
if [ $1 -eq 0 ]; then
    echo 1
    exit 0
fi
less=$(( $1 - 1 ))
sub=$( $0 $less )
facul=$(( $1 * $sub ))
echo $facul
exit 0


-- 
Peace!
  Mkx

---- perl -e 'print $i=pack(c5,(41*2),sqrt(7056),(unpack(c,H)-2),oct(115),10);'
---- echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlb xq | dc



More information about the lugos-list mailing list