使用Unix的朋友们恐怕都对Linux中加载内核时的"Loading Vmlinuz..........."
或BSD boot时旋转的卫星小信号映像颇深,其实我们也可以在自己的脚本中模拟
这样的动态进度条。使用下面两个脚本的模式,替换程序主体为你自己的脚本。
虽然有少许缺陷,但是一样有不小的乐趣哦。
程序1:模拟Linux loading kernelCODE
#####################################################################
#!/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 kernelCODE
#####################################################################
#!/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 '-'"bc"
sleep $INTERVAL
;;
"2") echo '\'"bc"
sleep $INTERVAL
;;
"3") echo "|bc"
sleep $INTERVAL
;;
"4") echo "/bc"
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 "bb"
#####################################################################
.
收藏分享评分