a616652325 发表于 2018-8-28 06:59:06

shell下的基础程序题练习

  1.简单的进度条程序

  lable数组 相当于进度条前进时,那个刷新的圆圈,进度条前进时显示进度,用count%显示
  程序运行结果:
  2.1-100之间的求和
  1>用while实现                        2>用for   in 实现
         
  程序运行结果:

  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
  程序运行结果:

  4>利用seq 和bc 进行求和
  seq   n :生成到这个数的所有数
  |bc:利用|bc可以求和
  例如:

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

  其中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
  93done
  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 {
  117local val=$1
  118local fib1=0
  119local fib2=0
  120fibc=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
  程序运行结果:

  4.读取另外一文件里的数值,求出最大值、最小值、和、平均值
1 #!/bin/bash  2
  3max=0
  4min=0
  5count=0
  6sum=0
  7read name
  8cat $name | while read line
  9do
  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 ] &&{
  21min=$line
  22 }
  23   let count++
  24   let sum=sum+line
  25echo "max=$max" "min=$min" "sum=$sum"
  26let avg=${sum}/${count}
  27echo "avg=$avg"
  28 done
  程序运行结果:


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


页: [1]
查看完整版本: shell下的基础程序题练习