免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5060 | 回复: 15
打印 上一主题 下一主题

shell写的进度指示条 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-02 00:50 |只看该作者 |倒序浏览
...


瞎写了两个给大家玩玩,也说不定可派上用场,不过不好别怨我,自己改改 。。。  试过,可以在 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
复制代码

论坛徽章:
0
2 [报告]
发表于 2003-04-02 08:26 |只看该作者

shell写的进度指示条

很好玩啊!

论坛徽章:
0
3 [报告]
发表于 2003-04-02 08:30 |只看该作者

shell写的进度指示条

8抽

论坛徽章:
0
4 [报告]
发表于 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

论坛徽章:
0
5 [报告]
发表于 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
...

嗯, 写得不错, 比偶的清楚简单.

论坛徽章:
0
6 [报告]
发表于 2003-04-02 17:14 |只看该作者

shell写的进度指示条

红袖的代码 收集 学习 中 ...

论坛徽章:
0
7 [报告]
发表于 2003-04-03 08:34 |只看该作者

shell写的进度指示条

建议加为精华!

建议红袖姐把代码收集起来,出本<<红袖全集>>
(俺的建议8c吧,到时候要送俺一本啊,签名的)

论坛徽章:
0
8 [报告]
发表于 2003-04-03 09:49 |只看该作者

shell写的进度指示条

加精了吧!

论坛徽章:
0
9 [报告]
发表于 2008-09-16 18:28 |只看该作者

收下来玩玩

论坛徽章:
0
10 [报告]
发表于 2008-09-17 09:18 |只看该作者
这么好的,一定要收起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP