Shell脚本编程练习
1、进度条
代码:
运行过程及结果:
2、1到100的求和
1、
代码:
#!/bin/bash sum=0 for i in {1..100} do let sum+=i done echo $sum
运行结果:
5050
2、
代码:
#!/bin/bash i=1 sum=0 while [ $i -le 100 ] do sum=$(( sum + i )) (( i++ )) done echo $sum
运行结果:
5050
3、
代码:
read val i=1 sum="" ret=0 while [ $i -le 100 ] do [ $i == 100 ] && { sum=${sum}${i} let ret+=$i break } sum=${sum}${i}+ let ret+=$i (( i++ )) done echo $sum=${ret}
运行结果:
4、递归实现
代码:
r#!/bin/bash add="" ret=0 function sum(){ local val=$1 [ $val != 1 ]||{ let ret+=1 add=`expr ${add}$1=` return } add=`expr ${add}$1+` let ret+=$val (( val-- )) sum $val } read var sum $var echo ${add}$ret
两次运行结果:
5.利用工具
3、从另一个文件读取数据,找出最大、最小及平均值
代码:
#!/bin/bash max=0 min=0 sum=0 avg=0 count=0 while read line do [ "$line" == "" ] &&{ continue } [ $count == 0 ] && { max=$line min=$line } [ $max -lt $line ] && { max=$line } [ $min -gt $line ] && { min=$line } let sum=${sum}+${line} (( count++ )) done<math_file printf "max: %d,min: %d,agv: %s\n" "${max}" "${min}" "`echo "ibase=10;scale=2;${sum}/ ${count}" | bc`"
运行结果:
4、斐波那契数列
1、
代码:
#!/bin/bash read n arr=(1 1) count=2 function fib(){ local n=$1 if [ $1 -le 1 ];then return 1 fi while [ $count -le $1 ] do let arr[count]=arr[count-1]+arr[count-2] (( count++ )) done } fib $n echo sum=${arr[$n]}
运行结果:
(该结果忽略了第一项)
2、
代码:
#!/bin/bash read n arr=(1 1) if [ n == 1 ];then echo ${arr[n]} else for (( i=2;i<=${n};i++ )) do let arr[i]=arr[i-1]+arr[i-2] done fi echo sum=${arr[n]}
运行结果:
同上
3、递归实现(效率较低)
代码:
read n fib1=0 fib2=0 fib_ret=0 function fib(){ local val=$1 if [ $val -eq 0 -o $val -eq 1 ];then echo 1 # return //此处的return可有可无 else fib1=$(fib $(($val-2))) fib2=$(fib $(($val-1))) let fib_ret=fib1+fib2 #fib_ret=$(( ${fib1} + ${fib2} )) echo ${fib_ret} fi } fib $n
运行结果:
结果同上
其实我们还可以把代码写的更加简洁一点,但本质上和上面是一样的
代码:
read n fib1=0 fib2=0 fib_ret=0 function fib(){ local val=$1 if [ $val -eq 0 -o $val -eq 1 ];then echo 1 # return else echo $(( $(fib $(($1-2))) + $(fib $(($1-1))) )) fi } fib $n
运行结果:
结果同上
5、字符串截取
代码:
#!/bin/bash while read line do echo -n `echo $line | cut -c 9-`//使用cut工具截取 echo -n `echo $line | cut -c 5-8 | tr [a-z] [A-Z]` echo `echo $line | cut -c -4` done<cut_file
运行结果:
《完》
转载于:https://blog.51cto.com/lingdandan/1789769