shell脚本中模拟Linux和BSD风格的进度条
或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