sque_print_blocks()
{
j=0
$BAKGRN
$BAKGRN
$BAKGRN
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKRED
$BAKRED
$BAKRED
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKBLK
$BAKBLK
$BAKBLK
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKYLW
$BAKYLW
$BAKYLW
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKBLU
$BAKBLU
$BAKBLU
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKPUR
$BAKPUR
$BAKPUR
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKCYN
$BAKCYN
$BAKCYN
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
$BAKWHT
$BAKWHT
$BAKWHT
j=$((j+1))
if [ $j -gt $1 ]
then
sleep $DELAY_TIME
return
fi
}
circle_print_blocks()
{
i="$1"
j=0
while [ true ]
do
if [ "$i" -le "0" ]
then
$BAKGRN
$BAKGRN
$BAKGRN
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "1" ]
then
$BAKRED
$BAKRED
$BAKRED
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "2" ]
then
$BAKBLK
$BAKBLK
$BAKBLK
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "3" ]
then
$BAKYLW
$BAKYLW
$BAKYLW
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "4" ]
then
$BAKBLU
$BAKBLU
$BAKBLU
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "5" ]
then
$BAKPUR
$BAKPUR
$BAKPUR
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "6" ]
then
$BAKCYN
$BAKCYN
$BAKCYN
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
if [ "$i" -le "7" ]
then
$BAKWHT
$BAKWHT
$BAKWHT
j=$((j+1))
i=$(((i+1) % COLOR_NUM))
fi
if [ $j -gt "7" ]
then
sleep $DELAY_TIME
return
fi
done
}
i=0
while [ true ]
do
if [ -z "$1" ]
then
sque_print_blocks $i
else
circle_print_blocks $i
fi
i=$(((i+1) % COLOR_NUM))
reset_line
done 很想实现在linux控制台上打印进度条,这样对于运行时间长的程序就不至于让用户等的不耐烦了。众所周知,ncurse库能很方便的在控制台上输出一些很花样信息,当然包括进度条这样小case的东西啦。但是,唯一然人不能接受的是,为了让控制台上及时的显示输出字符,必须用flush之类的函数刷新缓冲区,这样就导致要清除当前屏幕。如果,屏幕上有一些信息很重要的话,清除屏幕是非常让你难以理解的。另外termcap库也能实现这些功能,但是tgoto,tputs这样的函数直到现在我也不会用。天无绝人之路,根据rpm的进度条显示代码,我编写了以下的程序,可以方便的实现进度条的打印。当然你也可以随便在自己的程序中加上这些代码(只要你愿意哈)。#include #include #include
voidloop(inti,intj){ //print progress bar. for(j=0;j<i-1;j++) putchar(done); motion(); //print space after progress bar. for(j=1;j<LEN-i;j++) putchar(none); }