求1-100的和
a. 非递归
1 #!/bin/bash 2 sum=0 3 str="" 4 for i in {1..100} 5 do 6 let sum+=i 7 str+="$i+" 8 done 9 echo ${str%+}=$sum
输出结果:
b. 递归
29 function fun_sum() 30 { 31 num=$1 32 sum=0 33 if [ ${num} -le 1 ];then 34 echo 1 35 return 36 fi 37 let num-- 38 let sum=$1+$( fun_sum $num) 39 echo ${sum} 40 } 41 function main() 42 { 43 read n 44 sum=$(fun_sum $n ) 45 echo "${sum}" 46 } 47 main
输出结果:
2.求出一个文件中数据的最大值、最小值和平均值,精度为2
1 #!/bin/bash 2 count=0 3 4 while read line 5 do 6 let count++ 7 let sum+=$line 8 if [ $count -eq 1 ];then 9 max=$line 10 min=$line 11 ave=0 12 fi 13 [ $max -lt $line ] && max=$line 14 [ $min -gt $line ] && min=$line 15 done<file 16 echo "max=$max" 17 echo "min=$min" 18 echo "ave=`echo "base=10; scale=2; ${sum}/${count}" | bc`"
输出结果:
3.Fib
a. 非递归(循环)
1 #!/bin/bash 2 function fib() 3 { 4 n=$1 5 a=1 6 b=1 7 if [ ${n} -eq 1 -o ${n} -eq 2 ];then 8 echo 1 9 return 10 fi 11 while [ ${n} -gt 2 ] 12 do 13 let c=a+b 14 a=$b 15 b=$c 16 let n-- 17 done 18 echo ${c} 19 return 20 } 21 function main() 22 { 23 read n 24 fib $n 25 } 26 main
输出结果:
b. 递归
function fib() 24 { 25 n=$1 26 if [ $n -eq 1 -o $n -eq 2 ];then 27 echo 1 28 return 29 fi 30 let n-- 31 val1=$(fib $n) 32 let n-- 33 val2=$(fib $n) 34 let ret=$val1+$val2 35 #ret=$(fib (${n}-1))+$(fib (${n}-2)) //为什么这样不行 36 echo $ret 37 return 38 }
输出结果:
4.将一个文件中每一行的字符串进行转换,例如将“123abc456”转换为“456ABC123”
1 #!/bin/bash 2 while read line 3 do 4 # num1=$(echo $line | cut -c -3) #方法一 5 # num2=$(echo $line | cut -c 4-6) 6 # num3=$(echo $line | cut -c 7-) 7 num1=${line:0:3} #方法一 8 num2=${line:3:3} 9 num3=${line:6:3} 10 eval echo "${num3}${num2}${num1} | tr [a-z] [A-Z]" 11 done<file0