免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10793 | 回复: 4
打印 上一主题 下一主题

shell脚本中模拟Linux和BSD风格的进度条 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-26 18:34 |只看该作者 |倒序浏览
使用Unix的朋友们恐怕都对Linux中加载内核时的"Loading Vmlinuz..........."
或BSD boot时旋转的卫星小信号映像颇深,其实我们也可以在自己的脚本中模拟
这样的动态进度条。使用下面两个脚本的模式,替换程序主体为你自己的脚本。
虽然有少许缺陷,但是一样有不小的乐趣哦。


程序1:模拟Linux loading kernel

  1. #####################################################################
  2. #!/bin/sh
  3. #输出"."进度条函数,兼容bsh、ksh、bash
  4. #首先trap 1 2 3 15信号,重要

  5. trap 'kill $BG_PID;echo;exit' 1 2 3 15

  6. function dots
  7. {
  8. stty -echo >/dev/null 2>&1
  9. while true
  10. do
  11.   echo ".\c"
  12.   sleep 1  
  13. done
  14. stty echo
  15. echo
  16. }

  17. #---------------------------------------------
  18. # 主程序开始
  19. #---------------------------------------------

  20. #首先使dots函数后台运行
  21. dots &
  22. BG_PID=$!

  23. #开始程序主体,本例中执行休眠10秒
  24. #注意必要时使用 >/dev/null 2>&1关闭输出和错误回显,避免破坏显示
  25. sleep 10

  26. #程序结尾注意kill dots,否则dots会一直执行
  27. kill $BG_PID

  28. #####################################################################
复制代码




程序2:模拟FreeBSD loading kernel

  1. #####################################################################
  2. #!/bin/sh
  3. #输出"*"进度条函数,兼容bsh、ksh、bash
  4. #首先trap 1 2 3 15信号,重要

  5. trap 'kill $BG_PID;echo;exit' 1 2 3 15

  6. function rotate
  7. {
  8. INTERVAL=0.1         #进度条旋转时间0.1秒,注意并不是所有系统都支持非整数
  9. TCOUNT="0"                 
  10. stty -echo >/dev/null 2>&1
  11. while :
  12. do
  13. TCOUNT=`expr $TCOUNT + 1`
  14.    case $TCOUNT in
  15.    "1") echo '-'"\b\c"
  16.    sleep $INTERVAL
  17.    ;;
  18.    "2") echo '\\'"\b\c"
  19.    sleep $INTERVAL
  20.    ;;
  21.    "3") echo "|\b\c"
  22.    sleep $INTERVAL
  23.    ;;
  24.    "4") echo "/\b\c"
  25.    sleep $INTERVAL
  26.    ;;
  27.    *) TCOUNT="0" ;;
  28.    esac
  29. done
  30. stty echo
  31. }


  32. #---------------------------------------------
  33. # 主程序开始
  34. #---------------------------------------------

  35. #首先使rotate函数后台运行
  36. rotate &
  37. ROTATE_PID=$!

  38. #开始程序主体,本例中执行休眠10秒
  39. #注意必要时使用 >/dev/null 2>&1关闭输出和错误回显,避免破坏显示
  40. sleep 10

  41. #程序结尾注意kill dots,否则dots会一直执行;清除多余字符
  42. kill -9 $ROTATE_PID
  43. echo "\b\b"

  44. #####################################################################
复制代码


.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-02-26 19:45 |只看该作者

shell脚本中模拟Linux和BSD风格的进度条

有趣

论坛徽章:
0
3 [报告]
发表于 2005-02-26 21:34 |只看该作者

shell脚本中模拟Linux和BSD风格的进度条

我这里运行出来咋啥都不是呢?

论坛徽章:
0
4 [报告]
发表于 2005-02-26 23:39 |只看该作者

shell脚本中模拟Linux和BSD风格的进度条

echo 加上-e 参数就可以了

论坛徽章:
0
5 [报告]
发表于 2011-05-26 09:08 |只看该作者
总是出现kill的信息,请教怎么去掉
  1. #!/bin/bash

  2. function dots
  3. {
  4. stty -echo >/dev/null 2>&1
  5. while true
  6. do
  7.         echo -e ".\c"
  8.         sleep 1
  9. done
  10. stty echo
  11. echo
  12. }

  13. echo "111111111111111111111"
  14. dots &
  15. BG_PID=$!
  16. echo "222222222222222222"
  17. echo "PID=$BG_PID"
  18. kill ${BG_PID} >/dev/null 2>&1
  19. echo "3333333333333"
复制代码
输出
111111111111111111111
222222222222222222
PID=26409
.....
333333333333333333
./test.sh: line 24: 26409 Terminated              dots

请问,这一行怎么去掉???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP