shell 整理(36)===寫斐波那契數列

(一)寫以下所示數列
shell


[root@localhost ding1]# bash 5.sh bash

2/1ide

3/2it

5/3class

8/5awk

13/8變量

21/13sed

34/21循環

55/34方法

89/55

144/89

233/144


shell代碼以下:

#!/bin/bash

>aa
>bb
echo 1 2 | xargs -n1 >aa

for i in `seq 20`
do
a=`cat aa | sed -n ''$i'p'`
b=`cat aa |tail -1`
echo $(($a+$b)) >>aa
c=`cat aa | sed -n ''$(($i+1))'p'`
echo $c/$a >>bb
done
cat bb


計算結果以下,用awk 計算

[root@localhost ding1]# bash 5.sh |awk -F '/' '{a+=$1/$2;print a}'

2

3.5

5.16667

6.76667

8.39167

10.0071

11.6261

13.2437

14.8619

16.4799

18.098

19.716

21.334

22.9521

24.5701

26.1881

27.8062

29.4242

31.0422

32.6603

[root@localhost ding1]# 



上面的代碼是輸出文本,略微有點複雜,我補充第二中方法:

shell 代碼以下:

#!/bin/bash

a=1    #定義一個變量a 和 b 
b=2

for i in `seq 20`
do
        echo $b/$a    #shell 解析的時候是從上往下一步步來的,因此順序是很是重要的。
        c=$((a+b))    a=$b 和 b=$c不能顛倒過來
        a=$b        
        b=$c
done

第一次循環:  2/1     c=3   a=2  b=3
第二次循環:  3/2     c=5  a=3   b=5
第三次循環:  5/3     c=8   a=5  b=8
........


若是打印一個這樣的數列是否是也會了

例如:

1

2

3

5

8

........

shell 代碼以下:

#!/bin/bash

a=1
b=2
echo 1
for i in `seq 20`
do
        echo $b
        c=$((a+b))
        a=$b
        b=$c
done


輸出以下:

[root@localhost ding1]# bash 6.sh

1

2

3

5

8

13

21

相關文章
相關標籤/搜索