当前位置: 技术问答>linux和unix
shell中如何实现进度条功能?(只有10分了,对大家不住了~~)
来源: 互联网 发布时间:2015-11-21
本文导语: 我用的是bsh。 写了一个bsh的脚本,功能是安装某软件。 该软件的安装有多个阶段,希望达到下面的效果: ---------------开始安装--------------- 第一阶段 >>>>>>>>>>>>>>> 成功! 第二阶段 >>>>>>========= 某一阶段开始的时...
我用的是bsh。
写了一个bsh的脚本,功能是安装某软件。
该软件的安装有多个阶段,希望达到下面的效果:
---------------开始安装---------------
第一阶段 >>>>>>>>>>>>>>> 成功!
第二阶段 >>>>>>=========
某一阶段开始的时候,进度条显示的是 ==============,然后不断由 “>” 代替 “=”。
这个过程是可以循环的,即进度变成>>>>>>>>>>>>>后,如果该阶段没有完成,则又变回 ==============,如此循环,直到该阶段安装完成,显示“成功!”再进入下一阶段的安装。
或者达到这样的效果也行:
---------------开始安装---------------
第一阶段 --------------- 成功!
第二阶段 --------------- / (|/-|的循环)
类似于linux引导时那个转动的小棍,直到阶段安装完成,显示成功。
这两种方式感觉实现起来原理应该差不多。
但是不知道怎么实现,莫非要用到多线程(shell有多线程?)
在bsh中如何实现呢?
写了一个bsh的脚本,功能是安装某软件。
该软件的安装有多个阶段,希望达到下面的效果:
---------------开始安装---------------
第一阶段 >>>>>>>>>>>>>>> 成功!
第二阶段 >>>>>>=========
某一阶段开始的时候,进度条显示的是 ==============,然后不断由 “>” 代替 “=”。
这个过程是可以循环的,即进度变成>>>>>>>>>>>>>后,如果该阶段没有完成,则又变回 ==============,如此循环,直到该阶段安装完成,显示“成功!”再进入下一阶段的安装。
或者达到这样的效果也行:
---------------开始安装---------------
第一阶段 --------------- 成功!
第二阶段 --------------- / (|/-|的循环)
类似于linux引导时那个转动的小棍,直到阶段安装完成,显示成功。
这两种方式感觉实现起来原理应该差不多。
但是不知道怎么实现,莫非要用到多线程(shell有多线程?)
在bsh中如何实现呢?
|
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 $BARr"
PROGRESS=`expr $PROGRESS + 1`
if [ $PROGRESS -gt 20 ] ; then
PROGRESS=1
fi
sleep 1
done &
W_PID=`jobs -p | tail -1`
wait $S_PID
#!/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 $BARr"
PROGRESS=`expr $PROGRESS + 1`
if [ $PROGRESS -gt 20 ] ; then
PROGRESS=1
fi
sleep 1
done &
W_PID=`jobs -p | tail -1`
wait $S_PID
|
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
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