求出数字1~100的累加和:
要求数字的累加,可以使用循环来完成,如下代码:
#!/bin/bash sum=0 str="" #for i in {1..100} for ((i=1 ; i<=100 ; ++i)) do str+="${i}+" let sum+=i done echo "${str%+}=${sum}"
运行脚本:
另外一种可以用递归的方式:
#!/bin/bash read num sum=0 str="" function sum_fun() { num1=$1 if [ ${num1} -le 1 ];then//当数值小于等于1的时候直接返回 echo $num1 return fi let --num1 tmp=$(sum_fun $num1)//递归调用 let sum=$1+$tmp echo ${sum} } sum=$(sum_fun $num) echo "${sum}"
使用$()命令替换符的时候,会执行括号里面的命令,因此也就会新创建一个进程来执行该命令,也就是变量都是在一个进程内部有效的,因此使用的时候需要注意;
运行程序:
2. 进度条
使用shell脚本编写模拟进度条:
#!/bin/bash str="" arr=(‘-‘ ‘\‘ ‘|‘ ‘/‘)//定义数组模拟光标转动 for (( i=1; i<=100; ++i)) do let tmp=${i}%4 str+="#" printf "[%-100s][${i}%%] ${arr[$tmp]} \r" "${str}"//只换行不会车 sleep 0.1 done printf "\n"
运行程序:
3. 求出一个文件中数据的最大值、最小值和平均值,精度为2
文件中的数据值一行一个数据;
#!/bin/bash sum=0 count=0 while read line//按行读取 do let ++count//计算数据个数 [ $count -eq 1 ] && min=$line && max=$line//初始化最大值最小值,使其等于第一个数据 let sum+=$line//计算数值和 [ $line -gt $max ] && max=$line//如果数据大于最大值,更新最大值 [ $line -lt $min ] && min=$line//如果数据小于最小值,更新最小值 done<file//输出重定向 echo "max: ${max}" echo "min: ${min}" printf "argv: " echo "base=10;scale=2;${sum}/${count}" | bc
运行程序:
4. 求第N个斐波那契数
求第N个斐波那契数需要知道第N-1和第N-2个斐波那契数
#!/bin/bash //使用三个变量轮流使用,效率最高 read num val1=0//定义前两个数字 val2=1 tmp=$val1 for (( i=0; i < $num; ++i)) do let tmp=$val1+$val2 val1=$val2 val2=$tmp done echo "$num: $tmp"
运行程序:
使用递归仍然可以,只是效率要低:
#!/bin/bash read num function fib() { num1=$1 if [ $1 -lt 3 ];then echo $num1 return fi let --num1 val1=$(fib $num1) let --num1 val2=$(fib $num1) let ret=$val1+$val2 echo $ret } ret=$( fib $num ) echo "$num: $ret"
运行程序:
5. 将一个文件中每一行的字符串进行转换,例如将“123abc456”转换为“456ABC123”
while read line do //使用cut工具进行字符串截取 num1=$(echo ${line} | cut -c -3)//截取从左数第3个字符往左的所有字符 num2=$(echo ${line} | cut -c 7-)//截取从左数第7个字符往右的所有字符 str=$(echo ${line} | cut -c 4-6)//截取第4个字符到第6个字符之间的左右字符 //另一种字符串截取方式 # num1=${line:0:3} # num2=${line:6:3} # str=${line:3:3} eval echo "${num2}${str}${num1} | tr [a-z] [A-Z]"//使用tr工具进行转换 done<file
运行程序:
《完》
本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1791499
原文地址:http://2627lounuo.blog.51cto.com/10696599/1791499