求出数字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