互联网服务AIXshell进度条

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

使用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"

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


.收藏分享评分
参与0

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

hotmail
软件开发工程师hotmail
擅长领域: 数据库服务器云计算

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-09-05
  • 关注会员:0 人
  • 问题浏览:4140
  • X社区推广