本版版主招募中

 
标题: shell脚本中模拟Linux和BSD风格的进度条
freedemon
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 141
精华 7
积分 78
帖子 128
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2003-9-26
 
发表于 2005-2-26 18:30  资料  个人空间  主页 短消息  加为好友  添加 freedemon 为MSN好友 通过MSN和 freedemon 交谈
使用Unix的朋友们恐怕都对Linux中加载内核时的"Loading Vmlinuz..........."
或BSD boot时旋转的卫星小信号映像颇深,其实我们也可以在自己的脚本中模拟
这样的动态进度条。使用下面两个脚本的模式,替换程序主体为你自己的脚本。
虽然有少许缺陷,但是一样有不小的乐趣哦。


程序1:模拟Linux loading kernel
CODE

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

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

function dots
{
stty -echo >/dev/null 2>&1
while true
do
 echo ".\c"
 sleep 1  
done
stty echo
echo
}

#---------------------------------------------
# 主程序开始
#---------------------------------------------

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

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

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

#####################################################################




程序2:模拟FreeBSD loading kernel
CODE

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

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

function rotate
{
INTERVAL=0.1         #进度条旋转时间0.1秒,注意并不是所有系统都支持非整数
TCOUNT="0"                
stty -echo >/dev/null 2>&1
while :
do
TCOUNT=`expr $TCOUNT + 1`
  case $TCOUNT in
  "1") echo '-'"\b\c"
  sleep $INTERVAL
 ;;
  "2") echo '\\'"\b\c"
  sleep $INTERVAL
 ;;
  "3") echo "|\b\c"
  sleep $INTERVAL
 ;;
  "4") echo "/\b\c"
  sleep $INTERVAL
 ;;
  *) TCOUNT="0";;
  esac
done
stty echo
}


#---------------------------------------------
# 主程序开始
#---------------------------------------------

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

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

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

#####################################################################


.






灌过coolunix,灌过unixaid,灌过linuxaid和chinaunix,现在来陪大叔一起灌溉loveunix ~_*
顶部
lozity
LU新生
Rank: 1



UID 19918
精华 0
积分 2
帖子 4
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-5-5
 
发表于 2005-3-2 08:39  资料  个人空间  短消息  加为好友 
这么好的东西为什么没人顶!!!

顶部
huoran
LU幼天使
Rank: 2



UID 14569
精华 0
积分 30
帖子 59
活跃指数 1
LU金币 2015 个
LU金条 0 个
阅读权限 20
注册 2004-3-11
 
发表于 2005-3-24 18:10  资料  个人空间  短消息  加为好友 
我还没用过Linux & BSD
只现在用AIX 不会把系统搞瘫痪了吧。收藏先,等那天试一下。


顶部
Komtas
LU新生
Rank: 1



UID 26646
精华 0
积分 15
帖子 29
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-9-26
 
发表于 2005-3-24 19:50  资料  个人空间  短消息  加为好友 
偶以为只能用ncurses才能实现的tongue.gif

顶部
Komtas
LU新生
Rank: 1



UID 26646
精华 0
积分 15
帖子 29
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-9-26
 
发表于 2005-3-24 19:51  资料  个人空间  短消息  加为好友 
下次做安装程序时带上

顶部
wf201626 (Cappy Wang)
LU幼天使
Rank: 2


UID 1016
精华 4
积分 98
帖子 156
活跃指数 70
LU金币 455 个
LU金条 2000 个
阅读权限 20
注册 2003-10-26
来自 Owen Sound, On. Canada
 
发表于 2005-3-24 21:46  资料  个人空间  主页 短消息  加为好友 
it is wanderful!
i've test them on aix 5.1
both of them work fine
thanks





成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没JB事,晚上JB没啥事… …所以,我要做成功的男人!
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
rofee
LU新生
Rank: 1



UID 1746
精华 0
积分 16
帖子 31
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-11-5
 
发表于 2005-4-15 14:26  资料  个人空间  短消息  加为好友 
对于这个脚本:BSD boot时旋转的卫星小信号
程序运行结束后,屏幕上会打印一个字符出来,比如"\",如何消掉

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
w_xl
LU新生
Rank: 1



UID 14541
精华 0
积分 1
帖子 1
活跃指数 0
LU金币 2007 个
LU金条 0 个
阅读权限 10
注册 2004-3-11
 
发表于 2005-10-19 23:24  资料  个人空间  短消息  加为好友 


QUOTE:
原帖由 rofee 于 2005-4-15 14:26 发表
对于这个脚本:BSD boot时旋转的卫星小信号<br />程序运行结束后,屏幕上会打印一个字符出来,比如"\",如何消掉

只需将echo "\b\b"改为echo "\b \b"

另:第一种最好在kill $BG_PID前加上echo,以便回车换行。

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
renminyan
LU新生
Rank: 1



UID 90835
精华 0
积分 1
帖子 1
活跃指数 0
LU金币 1 个
LU金条 0 个
阅读权限 10
注册 2007-6-5
 
发表于 2007-6-5 10:14  资料  个人空间  短消息  加为好友 
ding~~~~~~~~~~~~~~~~

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
showbu
LU幼天使
Rank: 2



UID 93432
精华 0
积分 20
帖子 36
活跃指数 2
LU金币 38 个
LU金条 0 个
阅读权限 20
注册 2007-7-26
 
发表于 2007-8-14 14:37  资料  个人空间  短消息  加为好友 
强贴必留名,收藏!!!!

顶部
[广告] 土人
aix9030
LU幼天使
Rank: 2



UID 41103
精华 0
积分 141
帖子 248
活跃指数 3
LU金币 206 个
LU金条 0 个
阅读权限 20
注册 2006-2-20
 
发表于 2007-9-13 13:38  资料  个人空间  短消息  加为好友 
学习了!

顶部
[广告] 土人
awk
LU新生
Rank: 1


UID 106928
精华 0
积分 7
帖子 11
活跃指数 0
LU金币 11 个
LU金条 0 个
阅读权限 10
注册 2008-5-21
 
发表于 2008-5-21 21:51  资料  个人空间  短消息  加为好友 
强贴必留名,收藏中!!!

顶部
[广告] 土人
 



当前时区 GMT+8, 现在时间是 2008-8-21 06:08
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.057152 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver