更新时间:2022-09-22 15:37:38
(一)写如下所示数列
[root@localhost ding1]# bash 5.sh
2/1
3/2
5/3
8/5
13/8
21/13
34/21
55/34
89/55
144/89
233/144
shell代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/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 计算
1
|
[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 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#!/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 代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/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