shell脚本中模拟Linux和BSD风格的进度条
时间:2005-02-26
来源:互联网
或BSD boot时旋转的卫星小信号映像颇深,其实我们也可以在自己的脚本中模拟
这样的动态进度条。使用下面两个脚本的模式,替换程序主体为你自己的脚本。
虽然有少许缺陷,但是一样有不小的乐趣哦。
程序1:模拟Linux loading kernel
#####################################################################
#!/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
#####################################################################
#!/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"
#####################################################################
.
作者: freedemon 发布时间: 2005-02-26
作者: lozity 发布时间: 2005-03-02
只现在用AIX 不会把系统搞瘫痪了吧。收藏先,等那天试一下。
作者: huoran 发布时间: 2005-03-24
作者: Komtas 发布时间: 2005-03-24
作者: Komtas 发布时间: 2005-03-24
i've test them on aix 5.1
both of them work fine
thanks
作者: wf201626 发布时间: 2005-03-24
程序运行结束后,屏幕上会打印一个字符出来,比如"\",如何消掉
作者: rofee 发布时间: 2005-04-15
对于这个脚本:BSD boot时旋转的卫星小信号<br />程序运行结束后,屏幕上会打印一个字符出来,比如"\",如何消掉
只需将echo "\b\b"改为echo "\b \b"
另:第一种最好在kill $BG_PID前加上echo,以便回车换行。
作者: w_xl 发布时间: 2005-10-19
作者: renminyan 发布时间: 2007-06-05
作者: showbu 发布时间: 2007-08-14
作者: aix9030 发布时间: 2007-09-13
作者: awk 发布时间: 2008-05-21
作者: wxr001 发布时间: 2008-12-08
作者: mb0123 发布时间: 2009-01-02
作者: lyrryl 发布时间: 2009-01-03
作者: zhang_box 发布时间: 2011-11-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28