• shell脚本之十:while循环及应用实践


    十、while循环及应用实践

    (一)while循环语法

    while 循环语法:
    while <条件表达式>
    do
      指令
    done
    

    (二)范例1:

    每隔2s输出系统负载情况。

    [root@centos6-kvm3 scripts]# cat 10-01.sh 
    #!/bin/bash
    while true
    do
     uptime >>/tmp/oldboy.log
     sleep 2
    done
    [root@centos6-kvm3 scripts]# 
    

    1、脚本执行的方法

    用法 说明
    sh while1.sh & 把脚本while1.sh放到后台执行(后台运行脚本时常用)*
    nohup while1.sh & 使用nohup 把脚本while.sh放到后台执行。
    ctl+c 停止执行当前脚本或者任务
    ctl+z 暂停执行当前脚本或者任务
    bg 把当前脚本或者任务放到后台执行,bg可以理解为backround
    fg 把当前脚本或者任务拿到前台执行,如果有多个任务,可以使用fg加任务编号调出对应脚本任务,如fg 2,调出第二个脚本任务,fg可以理解为frontground
    jobs 查看当前执行的脚本或者任务
    kill 关闭执行的脚本任务,即以“kill %任务编号”的形式关闭脚本,这个任务标号,可以通过jobs获得。

    后台运行 & ,nohup,screen(运维人员)

    常用命令:

    • kill,killall,pkill :杀掉进程
    • ps:查看进程。
    • pstree:显示进程状态树。
    • top:显示进程。
    • renice:改变优先权。
    • nohup:用户退出系统之后继续工作。
    • pgrep:查找匹配条件的进程。
    • strace:跟踪一个进程的系统调用情况。
    • ltrace:跟踪进程调用库函数的情况。

    (三)范例2:

    请使用while循环对下面的脚本进行修改,使得当执行脚本时,每次执行完脚本以后不退出脚本了,而是继续提示用户输入。

    [root@centos6-kvm3 scripts]# cat 10-02.sh
    #!/bin/bash
    while true
    do
    	read -t 15 -p "please input two number:" a b
            expr $a + $b + 2 &>/dev/null
            if [ $? -ne 0 ]
            then
               echo "usage:$0 please input two number."
               continue
            fi
            if [ -z "$b" ]
            then
               echo "usage:$0 please input two number."
               continue
            fi
    	echo "a-b=$(($a-$b))"
    	echo "a+b=$(($a+$b))"
    	echo "a*b=$(($a*$b))"
    	echo "a/b=$(($a/$b))"
    	echo "a**b=$(($a**$b))"
    	echo "a%b=$(($a%$b))"
    done
    [root@centos6-kvm3 scripts]# 
    

    (四)范例3:

    猜数字游戏。首先让系统随机生成一个数字,给这个数字定一个范围(1-60),让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示,猜对后则给出猜对用的次数,请用while语句实现。

    [root@centos6-kvm3 scripts]# cat 10-04.sh
    #!/bin/bash
    random=$((RANDOM%60))
    count=0
    while true
    do
      read -p "please input a num:" num
      ((count+=1))
      if [ $random -lt $num ]
      then
         echo "你猜大了"
      elif [ $random -gt $num ]
      then
         echo "你猜小了"
       else
         echo "你猜对了,NB!共计猜了${count}次!"
         exit 1
      fi
      
    done
    [root@centos6-kvm3 scripts]# 
    

    (五)范例4:

    分析Apache访问日志(access_2010-12-8.log),把日志中每行的访问字节数对应字段数字相加,计算出总的访问量。

    [root@centos6-kvm3 scripts]# cat 10-05.sh 
    #!/bin/bash
    sum=0
    awk '{print $10}' access_2010-12-8.log | grep -v - >./oldboy.log
    while read line
    do
      ((sum=sum+line))
    done <./oldboy.log
    echo $sum
    [root@centos6-kvm3 scripts]# sh 10-05.sh
    1380681
    
  • 相关阅读:
    python学习之ajax和可视化管理工具
    操作系统-保护模式中的特权级下
    redis 分布式锁的 5个坑,真是又大又深
    数据库之数据表控制语句
    【NoSQL】Consul中服务注册的两种方式
    netstat命令使用方法以及详解
    Dockerfile与Dockerfile实战
    Spring boot+redis实现消息发布与订阅
    怎么寻回位置不可用移动硬盘的数据
    python字符前面u,r,f等含义
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/12804915.html
Copyright © 2020-2023  润新知