Chinaunix

标题: shell写的进度指示条 [打印本页]

作者: 红袖添香    时间: 2003-04-02 00:50
标题: shell写的进度指示条
...


瞎写了两个给大家玩玩,也说不定可派上用场,不过不好别怨我,自己改改 。。。  试过,可以在 sh, ksh, bash 下运行。。。


1. 旋转指针

  1. #!/bin/sh
  2. proc() {

  3.     c0='-'
  4.     c1='\'
  5.     c2='|'
  6.     c3='/'
  7.     begin=$1
  8.     end=$2
  9.     row=$3
  10.     pos1=`expr $begin + 1`
  11.     pos2=`expr $begin + 5`

  12.     printf "\033[2J"
  13.     while [ $begin -le $end  ]; do
  14.         index=`expr $begin % 4`
  15.         pro=`echo "scale=0; ${begin}*100/$end" | bc`
  16.         eval printf \"'\033[${row};${bos1}H$c'$index  '$pro%%  '\"
  17.         begin=`expr $begin + 1`
  18.     done
  19.     echo "done"
  20. }

  21. # call subroutine
  22. proc 0 102 20
复制代码


2. 进度条

  1. #!/bin/sh

  2. abort() {
  3.     printf  "\033[m\n"
  4.     exit
  5. }

  6. # do nothing, just simulate time consume.
  7. idle() {
  8.     i=1
  9.     sum=`date +%S`
  10.     sum=`expr $sum \* $sum | cut -b 1`
  11.     sum=`expr $sum \* 10`
  12.     while [ $i -le $sum ]; do
  13.         i=`expr $i + 2 `
  14.         trap abort  2
  15.     done
  16. }

  17. proc() {
  18.     begin=$1
  19.     end=$2
  20.     row=$3
  21.     pos1=`expr $begin + 1`
  22.     pos2=`expr $end - 1`
  23.     mid=`echo "($begin+$end)/2-2" |bc`

  24.     printf "\033[2J"
  25.     printf "\033[${row};${begin}H["
  26.     printf "\033[${row};${end}H]"
  27.     while [ $pos1 -le $pos2  ]; do
  28.         pro=`echo "scale=0; ($pos1 - $begin)*100/($pos2-$begin)" | bc`
  29.         if [ $pos1 -gt $mid ]; then
  30.             printf "\033[7m\033[${row};${mid}H$pro%%\033[${row};${pos1}H:"
  31.         else
  32.             printf "\033[m\033[${row};${mid}H$pro%%\033[7m\033[${row};${pos1}H:"
  33.         fi
  34.         pos1=`expr $pos1 + 1`
  35.         idle
  36.         trap abort  2
  37.     done
  38.     printf "\033[m\n"
  39.     echo "done"
  40. }

  41. # call subroutine
  42. printf "### proc 1 80 10 ### hit ENTER to continue "
  43. if read a; then
  44.     proc 1 80 10
  45. fi

  46. printf "### proc 25 55 10 ### hit ENTER to continue "
  47. if read a; then
  48.     proc 25 55 20
  49. fi
复制代码

作者: nmgzw    时间: 2003-04-02 08:26
标题: shell写的进度指示条
很好玩啊!
作者: nkliyong    时间: 2003-04-02 08:30
标题: shell写的进度指示条
8抽
作者: binary    时间: 2003-04-02 09:38
标题: shell写的进度指示条
非常有专业意味的两段代码,谢谢!

原来本论坛也有人写过类似代码,与上面的旋转指针差不多,写法略有不同,算是多一个选择吧

drawper ()
{
_per=`expr $1 \* 100 / $2`
case `expr $_per / 4 % 4` in
0) _char="|" ;;
1) _char="/" ;;
2) _char="-" ;;
3) _char="\\" ;;
esac
printf "\r$_char  $_per%%"
if [ $1 -eq $2 ];then
printf "\n"
fi
}

i=1
while [ $i -le 100 ]
do
drawper $i 100
i=`expr $i + 1`
done
作者: 红袖添香    时间: 2003-04-02 17:11
标题: shell写的进度指示条
原帖由 "binary" 发表:
非常有专业意味的两段代码,谢谢!

原来本论坛也有人写过类似代码,与上面的旋转指针差不多,写法略有不同,算是多一个选择吧

drawper ()
{
_per=`expr $1 \* 100 / $2`
case `expr $_per / 4 % 4` in
0) _char="|" ;;
1) _char="/" ;;
2) _char="-" ;;
3) _char="\\" ;;
esac
printf "\r$_char  $_per%%"
if [ $1 -eq $2 ];then
printf "\n"
fi
}

i=1
while [ $i -le 100 ]
do
drawper $i 100
i=`expr $i + 1`
done
...

嗯, 写得不错, 比偶的清楚简单.
作者: jourmen    时间: 2003-04-02 17:14
标题: shell写的进度指示条
红袖的代码 收集 学习 中 ...
作者: nmgzw    时间: 2003-04-03 08:34
标题: shell写的进度指示条
建议加为精华!

建议红袖姐把代码收集起来,出本<<红袖全集>>
(俺的建议8c吧,到时候要送俺一本啊,签名的)
作者: tiansgx    时间: 2003-04-03 09:49
标题: shell写的进度指示条
加精了吧!
作者: qiannh888    时间: 2008-09-16 18:28

收下来玩玩
作者: 我是DBA    时间: 2008-09-17 09:18
这么好的,一定要收起来
作者: 7717060    时间: 2008-09-17 15:51
有意思哦
作者: wstar    时间: 2008-09-17 22:08
代码收集整理中。。。
作者: dintan    时间: 2008-09-18 09:04
呵呵,好像在一本书上看到类似的写法啊.
作者: cjaizss    时间: 2008-09-18 09:22
红袖添香写的东西啊,这么多年了还被人翻出来了
作者: gao_linfeng    时间: 2008-09-18 14:02
i=1;while :;do for a in \- \\ \| \/ ;do if test $i -le 100;then sleep 0.1s;echo -ne "\r\e[33;1m$a $i%\e[0m";else break 2;fi;((i++));done;done

[ 本帖最后由 gao_linfeng 于 2008-9-18 15:17 编辑 ]
作者: lanyuku    时间: 2008-09-18 17:19
as5.2上測過,沒問題,但怎么引用到其它程序里。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2