shell小脚本

  1. 求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

时间: 2024-10-20 09:40:48

shell小脚本的相关文章

shell 小脚本

0. shell 调试sh -x somefile.sh在somefile.sh 文件里加上set+x set-x 1. 用 && || 简化if elsegzip -t a.tar.gz if [[ 0 == $? ]]; then echo "good zip" else echo "bad zip" fi 可以简化为:gzip -t a.tar.gz && echo "good zip" || echo &q

shell小脚本实现上传目录中的所有文件到服务器

前段时间,公司新开发了一套用于国外的bss系统,其中有一个功能是,让客户上传证件.以及本人手持证件的照片,系统这边进行人工审核,但是由于中国到国外的网络很慢,审核工作在国外,而我们上传端在中国,所以同步上传的时候由于网络原因失败率极高,因此必须将这些文件变成异步上传,开发的工作任务压力太大,这个功能不大,但是改起来又会很麻烦,所以,无奈,就用运维的方法处理这个问题了,废话多了,请看脚本[菜鸟一枚,如有不妥还请不吝赐教,十分感激]: #!/bin/sh ###Warning:Not Modifie

Linux Shell 小脚本经典收藏

1.在两个文件中找出相同的号码 diff -y xx.txt oo.txt | egrep -v "<|>" | awk '{print $2}' 2.打印第几行到第几行之间 cat 1 | awk 'NR==2,NR==4{print}' 1.删除Linux远程用户连接会话 [[email protected] logs]# w 10:45:28 up 15 days, 16:23, 4 users, load average: 0.00, 0.00, 0.00 USER

12个Linux系统高频率命令行和shell小脚本

以下是在部署OpenStack过程中摘录的一些较为常用的命令行或shell脚本,仅供参考. 1.杀死所有存在的僵尸进程 ps -ef | grep defunc | grep -v grep | awk '{print $3}' | xargs kill -9 #pkill dnsmasq 2.去掉配置文件中的#符号和空白行 cat >/root/delsc.sh <<eof #!/bin/bash # delete all spaces and comments of speciali

一个简单的shell小脚本,批量ping主机ip的存活状态

#!bin/bash #ping host ip #2018年7月17日 #The shell script author xiaolong for hostip in {200..210}; #此处还可以换成 `seq 200 210`: do ip="192.168.1.$hostip" ping -c 1 -W 2 $ip &> /dev/null #/dev/null相当与是一个垃圾站,将错误信息放到里面: if [ "$?" == "

实现几个shell小脚本

实现进度条 my_pb.sh 运行结果 进行1-100之间的求和 sum.sh 运行结果 递归实现: sum_recursion.sh 运行结果

查看Linux服务器网卡流量小脚本shell

有时我们需要较为实时的查看服务器上的网卡流量,这里我写了个shell小脚本.脚本中用了while true"死循环",每隔10s从"/proc/net/dev"中取一次值并根据10s内的差值计算10s内的平均带宽:按ctrl+c停止执行.脚本兼容centos6和7,脚本不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了. 注:1kb=8字节,1Mb=1024kb #!/bin/sh   if [ "$1" = ""

telnet小脚本

Shell学习之运维用的telnet小脚本 白羊IT关注0人评论1469人阅读2017-11-30 21:56:37 生活中经常遇到的一件事情我想是,领导给你一堆IP,让你去telnet测试下网络连通性,这时候你就需要写一个shell小脚本去高效的执行了.以下是我在生产环境上试验过的,不一定是最优的代码,当我想应该也够用了. 共有两种情况:第一种情况是每个IP的端口都不固定 IPs_Port.txt 存放的文件是 192.168.1.1 4949 192.168.2.3 9090 cat IPs

查看Linux服务器网卡流量小脚本shell和Python各一例

有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(后写的,一次可查看多个网卡).脚本中都用了while true"死循环",每隔10s从"/proc/net/dev"中取一次值并根据10s内的差值计算10s内的平均带宽:按ctrl+c停止执行.脚本兼容centos6和7 两个脚本都不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了.直接上图上脚本: shell版-