在 linux 的命令行输出进度条

linux 有些个命令比如 wget 会显示一个进度条。终于知道了一个办法弄出这个效果。其实也很简单:
<?php
for ($i = 0; $i <= 50; $i++) {
  printf(“progress: [%-50s] %d%%r”, str_repeat(‘#’,$i), $i * 2);
  usleep(1000 * 100);
}
echo “n”;
echo “Done.n”;

每次用 r 结尾就是了。n 是 new line,r 是 return 。也就是回到行首。

bash 版:

b=”
for ((i=0;$i<=100;i+=2))
do
  printf “progress: [%-50s] %d%%r” $b $i
  sleep 0.1
  b+=’#’
done
echo

9 thoughts on “在 linux 的命令行输出进度条

  1. 花开 October 9, 2010 / 4:15 pm

    难道是版本的问题?
    b+=’#’
    这种写法,bash解释不了啊。
    即使是
    b=0
    然后
    b+=1
    也还是解释不了。必须写成
    let b+=1
    或者
    ((b+=1))

  2. 花开 October 9, 2010 / 4:11 pm

    其中
    for ((i=0;$i<=100;i+=2))
    可以写成
    for ((i=0;i<=100;i+=2))
    其中
    b+=’#’
    必须写成
    b=$b’#’

  3. bonnie February 24, 2009 / 12:56 pm

    谢振轩–谢霆锋的儿子

  4. wendy February 24, 2009 / 12:55 pm

    难得你更新一篇,居然还看不懂 ╮(╯_╰)╭

  5. bonnie February 21, 2009 / 11:54 am

    你名字跟一个人的只差一个字.

  6. 光头 February 21, 2009 / 11:42 am

    走过路过,记得要回贴
    用了你那个变态的模板

  7. surfchen February 19, 2009 / 12:14 am

    top可没这么简单。像iptraf,vim更是复杂,有个叫ncurses的lib专门做这个事情的。
    你要像top那样清屏,也不简单阿,clear不会清除屏幕的buffer,只是把整个屏幕往下拉而已。

  8. kevin February 18, 2009 / 10:06 pm

    还有类似top的命令,一直纳闷怎么做的

  9. kevin February 18, 2009 / 10:04 pm

    恩,解惑啊!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s