shell中如何实现进度条功能?(只有10分了,对大家不住了~~)

DD88 2006-04-19 08:32:30
我用的是bsh。

写了一个bsh的脚本,功能是安装某软件。
该软件的安装有多个阶段,希望达到下面的效果:

---------------开始安装---------------
第一阶段 >>>>>>>>>>>>>>> 成功!
第二阶段 >>>>>>=========

某一阶段开始的时候,进度条显示的是 ==============,然后不断由 “>” 代替 “=”。
这个过程是可以循环的,即进度变成>>>>>>>>>>>>>后,如果该阶段没有完成,则又变回 ==============,如此循环,直到该阶段安装完成,显示“成功!”再进入下一阶段的安装。

或者达到这样的效果也行:
---------------开始安装---------------
第一阶段 --------------- 成功!
第二阶段 --------------- / (|/-\|的循环)

类似于linux引导时那个转动的小棍,直到阶段安装完成,显示成功。


这两种方式感觉实现起来原理应该差不多。

但是不知道怎么实现,莫非要用到多线程(shell有多线程?)

在bsh中如何实现呢?
...全文
578 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iisbsd 2006-04-20
  • 打赏
  • 举报
回复
10分就只有程序,没有说明:
#!/usr/local/bin/bash

set -m
sleep 10 & # replace wit your installation program step #1
S_PID=`jobs -p | tail -1`
PROGRESS=1
while [ "`ps -p $S_PID | wc -l`" -ne "1" ] ; do
CH='>'
BAR=
for IDX in `jot 20`; do
if [ $IDX -eq $PROGRESS ] ; then
CH='='
fi
BAR=$BAR$CH
done
printf "Stage #1 $BAR\r"
PROGRESS=`expr $PROGRESS + 1`
if [ $PROGRESS -gt 20 ] ; then
PROGRESS=1
fi
sleep 1
done &

W_PID=`jobs -p | tail -1`
wait $S_PID
iisbsd 2006-04-20
  • 打赏
  • 举报
回复
太廉价了吧?10分???
pacman2000 2006-04-20
  • 打赏
  • 举报
回复
10分。。。呵呵,给你个例子吧。
for i in 0 10 20 30 40 50 60 70 80 90 100
do
echo $i
sleep 1
done | dialog --title "Install" --backtitle "MySoft" --gauge "Please waiting..." 10 60
kingofworl 2006-04-20
  • 打赏
  • 举报
回复
学习
DD88 2006-04-20
  • 打赏
  • 举报
回复
没有人知道吗?

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧