1.简单的进度条程序

shell下的基础程序题练习_斐波那契数

lable数组 相当于进度条前进时,那个刷新的圆圈,进度条前进时显示进度,用count%显示

程序运行结果:shell下的基础程序题练习_各种求和_02

2.1-100之间的求和

   1>用while实现                        2>用for   in 实现

   shell下的基础程序题练习_各种求和_03           shell下的基础程序题练习_各种求和_04    

  程序运行结果:

  shell下的基础程序题练习_各种求和_05

3>递归实现

digui

 function add()                          

  {

  local val=$1

  local sum=0

  local add1=0

  local add2=0

 if [ $val -eq 1 ];then

   echo 1

   return

 fi

  add1=$val

  let val--

  add2=$(add $val)

  let sum=$add1+$add2

   echo $sum

}

 function main()

 {

    read n

    add $n

 }

 main

程序运行结果:

 shell下的基础程序题练习_进度条_06

4>利用seq 和bc 进行求和

  seq   n :生成到这个数的所有数

  |bc:利用|bc可以求和

例如:

shell下的基础程序题练习_进度条_07

所以1-100求和可以这样写:

shell下的基础程序题练习_进度条_08

其中tr表示替换,seq出来的所有数都有换行符,通过tr将'\n'替换为'+'。后面的sed 是将最后一个'+'号替换为'\n',再通过bc进行求和。

3.求第n个斐波那契数

  1>非递归实现

local 修饰的变量是局部变量

 86 function fib()

 87 { 

 88   local val=$1

 89    while [ $val -eq 0 -o $val -eq 1 ]

 90   do

 91    echo 1

 92    return

 93  done 

 94   i=1

 95   j=1

 96    while [ $val -ge 2 ]

 97    do

 99   let fibn=$i+$j

 100     i=$j

 101     j=$fibn

 102   ((val--))

 103   done

 105 }

 106 function main()

 107 {

 108   read n

 109   fib $n

 110   echo $fibn

 112 }

113 main

2>递归实现

思想:当n=1或者n=0时,return 1。因为第n个斐波那契数是第n-1个和第n-2个数之和,所以对传过来的n值先减1在递归保存值,再对n减1递归保存值,第n个就是两个保存者之和。


115 function fib()

116 {

117  local val=$1

118  local fib1=0

119  local fib2=0

120  fibc=0

121 if [ $val -eq 0 -o $val -eq 1 ];then

122 echo 1

123 return

124 fi

125 let val--

126 fib1=$(fib $val)

127 let val--

128 fib2=$(fib $val)

129 let fibc=$fib1+$fib2

130 echo $fibc

131 

132 }

133 

134 function main()

135 {

136   read n

137   fib $n

138 

139 }

140 main

程序运行结果:

shell下的基础程序题练习_斐波那契数_09


4.读取另外一文件里的数值,求出最大值、最小值、和、平均值

  1 #!/bin/bash
 2
 3  max=0
 4  min=0
 5  count=0
 6  sum=0
 7  read name
 8  cat $name | while read line
 9  do
10   [ $count -eq 0 ] &&{
11      echo 'count'
12      max=$line
13      min=$line
14
15     }
16  [ $max -lt $line ] &&{
17    max=$line
18  }
19
20  [ $min -gt $line ] &&{
21  min=$line
22 }
23   let count++
24   let sum=sum+line
25  echo "max=$max" "min=$min" "sum=$sum"
26  let avg=${sum}/${count}
27  echo "avg=$avg"
28 done

程序运行结果:

shell下的基础程序题练习_进度条_10

shell下的基础程序题练习_斐波那契数_11

cat $name 将其重定向到name文件中,然后通过行读取参数,进行判断和运算。