免费注册 查看新帖 |

Chinaunix

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

[技术分享]linux shell 之 进度条实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-14 11:34 |只看该作者 |倒序浏览
本文原创
欢迎转载


#!/bin/sh
# $1 :总大小
# $2 :当前值
#
################### funcitons #####################
calu_munber_len()
{
number=$1
len=0
while [ $number -ne 0 ]
do
  len=`expr $len + 1`
  number=`expr $number / 10`
done
return $len
}
calu_progressbar_len()
{
return `expr $1 - 13 - $2 \* 2`
}
calu_percent()
{
return `expr $2 \* 100 / $1`
}
show_progress()
{
#计算进度条显示的格数和空格数
temp1=`expr $1 \* $2 / 100`
#echo $temp1
temp2=`expr $1 - $temp1`
#绘制进度条,添加进度
bar="["
i=0
while [ $i -lt $temp1 ]
do
  i=`expr $i + 1`
  bar=$bar">"
done
#绘制进度条,添加空格
i=0
while [ $i -lt $temp2 ]
do
  i=`expr $i + 1`
  bar=$bar" "
done
bar=$bar"] [$2%] [$3/$4]"
echo -n "$bar"
}
#####################################################
if [ "$1" = "" ] ; then
echo "arg1 must not be NULL"
exit 1
elif [ "$2" = "" ] ; then
echo "arg2 must not be NULL"
exit 1
fi
if [ $1 -eq 0 ] ; then
echo "arg1 must not be 0"
else
#echo $1
#echo $2
WINDOW_LINES=$(tput lines)
WINDOW_COLS=$(tput cols)
tput init
tput cup `expr $WINDOW_LINES - 1` 0
#计算总值的长度
calu_munber_len $1
numberlen=$?
#echo "len is $numberlen"

#计算进度条的长度
calu_progressbar_len $WINDOW_COLS $numberlen
progressbarlen=$?
#echo "progresslen is $progressbarlen"

#计算当前百分比
calu_percent $1 $2
percent=$?
#echo "percent is $percent%"
#显示进度条
show_progress $progressbarlen $percent $2 $1
fi

将上述内容保存为脚本文件progress

#!/bin/sh
i=0
while [ $i -le $1 ]
do
./progress $1 $i
i=`expr $i + 5`
done
将上述内容保存为脚本文件test

将progress和test文件放在一个目录下,执行./test num,将会看到一个进度条,例如:
./test 100
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>                  ] [85%] [85/100]

另外,大家可以改变一下终端窗口的宽度看看,进度条还可以自动适应窗口宽度哦~~

[ 本帖最后由 Cy158358 于 2009-1-16 14:06 编辑 ]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [报告]
发表于 2009-01-14 19:02 |只看该作者
试用一下。

论坛徽章:
0
3 [报告]
发表于 2009-01-14 23:02 |只看该作者
一直想让cp有个进度条。不知道能不能成

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
4 [报告]
发表于 2009-01-15 01:18 |只看该作者
原帖由 emmoblin 于 2009-1-14 23:02 发表
一直想让cp有个进度条。不知道能不能成

修改源码吗?

论坛徽章:
0
5 [报告]
发表于 2009-01-15 13:36 |只看该作者
libcurse做这个容易些

论坛徽章:
0
6 [报告]
发表于 2009-01-15 14:40 |只看该作者
不错!很有意思!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP