关闭

shell脚本编程实例--进度条,求和&平均值,斐波那契,改变字符串大小顺序

标签: shell脚本编程实例
304人阅读 评论(0) 收藏 举报
分类:

利用求1+2+3+…+100的和,要求打印出1+2+3+…+100=5050

我想了两种方法:

  1. 字符串拼接
  2. 依次打印

两种思路代码如下:

//依次打印
sum=0
for ((i=1; i<=100; i++))
do
    if [ $i -eq 100 ];then
        echo -n "$i="
        break
    fi    

    echo -n "$i+"
    let sum+=i
done
echo $sum
//字符串拼接
sum=0
i=1
str=""
while test $i -le 100
do
    if [ $i -eq 100 ];then
        str=$str$i"="
        break
    fi

    str=$str$i"+"
    let sum+=i
    let i++
done
echo $str$sum


利用函数实现三个数的最大值,三个数需要从命令行传入

function max_min()
{
    max=$1
    min=$1

    for i in $@
    do
        if test $max -lt $i ;then
            max=$i
        fi
        if [ $min -gt $i ]; then
            min=$i
        fi
    done

    echo "max = $max"
    echo "min = $min"

}

max_min $1 $2 $3


显示进度条

str=''
arr=( "|" "/" "-" "\\")
count=0

for ((i=0; i<=100; i++))
do
    printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${arr[count]}"
    str=$str'#'
    let count++
    let count%=4
    sleep 0.05
done

#echo ""
printf "\n"

这里写图片描述

彩色进度条

function f()
{

    local color='\033[45m'
    local clear='\033[0m' 
    str=''
    arr=( "|" "/" "-" "\\")
    count=0

    for ((i=0; i<=100; i++))
    do
        printf "$color[%s][%d%%][%c]$clear\r" "$str" "$i" "${arr[count]}"
        str=$str' '
        let count++
        let count%=4
        sleep 0.05
    done

    #echo ""
    printf "\n"
}

f  #调用函数

这里写图片描述



斐波那契

说明:为了尽快熟悉shell语法,Fib采用三种方法实现

function Fib()
{
    local first=1
    local second=1
    local third=$(( $first+$second ))
    if [ $1 -le 0 ];then
        echo "$1 should be > 0"
        exit -1
    elif [ $1 -eq 1 -o $1 -eq 2 ];then
        echo 1
        exit 0
    fi


    i=3
    while [ $i -le $1 ]
    do
        let third=first+second
        let first=second
        let second=third
        let i++
    done

    echo $third
}

function FibArr()
{
    local arr=()
    arr[1]=1
    arr[2]=1

    if [ $1 -le 0 ];then
        echo "$1 should be > 0"
        exit -1
    elif [ $1 -eq 1 -o $1 -eq 2 ];then
        echo 1
        exit 0
    fi

    i=3
    while test $i -le $1
    do
        let arr[i]=arr[i-1]+arr[i-2]
        let i++
    done
    echo ${arr[$1]}
}

function FibR()
{
    if [ $1 -eq 1 -o  $1 -eq 2 ];then
        echo 1
        exit 0
    fi

    pprev=$(( $1-2 ))
    prev=$(( $1-1 ))

    pprev_ret=$(FibR $pprev)
    prev_ret=$(FibR $prev)
    ret=$(( pprev_ret+prev_ret ))
    echo $ret
}

FibR $1

Fib $1

FibArr $1


求平均值,精度保证两位小数

if [ $# -lt 3 ];then
    echo "please input at least 3 arg"
    exit -1
fi

max=$1
min=$1
sum=0
for i in $@
do
    #if [ $max -lt $i ];then
    #    max=$i
    #fi

    #if [ $min -gt $i ];then
    #    min=$i
    #fi
    [ $max -lt $i ] && max=$i
    [ $min -gt $i ] && min=$i 
    let sum+=i
done

echo "max=$max"
echo "min=$min"
echo "sum=$sum"
avg=` echo "scale=2; $sum / $#" | bc`
echo "avg=$avg"

改变字符串

123abc456
123def456

改为

123ABC456
123DEF456

while read line
do
    part1=` echo $line | cut -c 1-3 `
    part2=` echo $line | cut -c 4-6 | tr '[a-z]' '[A-Z]' `
    part3=` echo $line | cut -c 7-9 `
    echo $part3$part2$part1
done < file > newfile
0
0
查看评论

awk求和、平均值、最大小值

1、求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 2、求平均 cat data|awk '{sum+=$1} END {print "Average = ...
  • liuxiao723846
  • liuxiao723846
  • 2017-02-16 16:33
  • 1610

Java程序设计(十一)----计算的窗口求和求平均值

* 程序的版权和版本声明部分 * Copyright (c) 2012, 烟台大学计算机学院学生 * All rights reserved. * 作 者: 刘镇 * 完成日期: 2012 年 11 月 04 日 * 版 本 号: 2.011 * 对任务及求解方法的描述部分...
  • qdliuzhen
  • qdliuzhen
  • 2012-11-04 15:19
  • 2728

斐波那契字符串

问题 E: 斐波那契字符串 时间限制: 1 Sec  内存限制: 128 MB 提交: 8  解决: 2 [提交][状态][讨论版] 题目描述 相信大家对斐波那契数列都非常熟悉,现在我们对斐波那契数列做...
  • xunalove
  • xunalove
  • 2017-03-05 20:58
  • 339

js斐波那契数列求和

function fbo(i){ if(i==2||i==1){return 1;} return fbo(i-1)+fbo(i-2); } alert(fbo(4));
  • u010403387
  • u010403387
  • 2015-06-23 21:06
  • 1349

Java数组的应用2:数组的最大,最小,求和,平均值,倒置

import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ // Scanner s = new Scanner(System.in); // System.out.p...
  • morixinguan
  • morixinguan
  • 2016-08-17 14:44
  • 2045

shell脚本中字符串比较

shell中对变量的值添加单引号、双引号和不添加的区别: 1.对类型来说是无关的,即不是添加了引号就编程了字符串类型 2.单引号不对相关量进行替换,比如不对$符号解析成变量引用,从而用相应的变量的值替换,双引号则会进行替换。 字符串比较的方法: 相等比较:  ...
  • u011138533
  • u011138533
  • 2016-08-25 09:58
  • 2678

斐波那契数列求和公式

斐波那契数列指的是这样一个数列:1、1、2、3、5、8、13、21、……    这个数列从第三项开始,每一项都等于前两项之和。它的通项公式为:(见下图)(又叫“比内公式”,是用无理数表示有理数的一个范例。) 斐波那契数列求和公式:
  • junfriends
  • junfriends
  • 2011-07-30 18:48
  • 4535

shell脚本初试--至少三个数求最大、最小、平均值

至少三个数求最大、最小、平均值       需要判断 传⼊入的数字是否⾜足够,否则输出警告信息。平均值保留两位⼩小数 像这类算法估计以前都接触过,有各种版本可以实现,我想跟大家分享我初学的shell脚本实现 实现部分: 实现结果: &#...
  • fangfang_666
  • fangfang_666
  • 2017-03-28 11:35
  • 1190

斐波那契数列及其求和

斐波那契数列的形式为; 1,1,2,3,5,8,13,21,34,55,... 其通项为: F(0)=1; F(1)=1; F(n)=F(n-1)+F(n-2) C++程序: /* 案例7 斐波那契数列2 求和 */ #include using nam
  • DragonTang
  • DragonTang
  • 2011-10-06 14:50
  • 6877

shell脚本实现进度条功能

一,什么是shell脚本。一个 shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,然后执行 文件中的所有命令,就好像这些命令已经直接被输入到了命令行中一样。Shell 有些独特,因为它不仅是一个功能强大的命令行接口,也是一个脚本语言解释器。我们将会看到, 大多数能够在命令行中完...
  • qq_38353700
  • qq_38353700
  • 2017-07-02 22:49
  • 96
    个人资料
    • 访问:44804次
    • 积分:1391
    • 等级:
    • 排名:千里之外
    • 原创:97篇
    • 转载:11篇
    • 译文:0篇
    • 评论:11条
    最新评论