Shell腳本實現(xiàn)進度條的兩種方式
1、腳本中各模塊(或函數(shù))運行過程可以量化,則可以直接使用帶百分比的進度條。
#!/bin/bash
mark=''
for ((ratio=0;${ratio}<=100;ratio+=5))
do
sleep 0.2
printf "progress:[%-40s]%d%%\r" "${mark}" "${ratio}"
mark="##${mark}"
done
echo
如下圖,進度條中’#'的數(shù)量和進度條長度成正比,printf打印每次只回車不換行,新的異常打印會覆蓋之前的打印,執(zhí)行完成后使用echo換行。

2、有些情況下你也許不知道程序什么時候結(jié)束,只是需要一個動態(tài)的進度條來表示程序正在運行,比如進度條由[----------]變成[>---------],進度條里面的-不斷被>替換,當所有的-都被替換后所有符號又重新變成-,直到程序結(jié)束運行。
#!/bin/bash
trap 'onCtrlC' INT
function onCtrlC () {
#捕獲CTRL+C,當腳本被ctrl+c的形式終止時同時終止程序的后臺進程
kill -9 ${do_sth_pid} ${progress_pid}
echo
echo 'Ctrl+C is captured'
exit 1
}
do_sth() {
#運行的主程序
sleep 10
}
progress() {
#進度條程序
local main_pid=$1
local length=20
local ratio=1
while [ "$(ps -p ${main_pid} | wc -l)" -ne "1" ] ; do
mark='>'
progress_bar=
for i in $(seq 1 "${length}"); do
if [ "$i" -gt "${ratio}" ] ; then
mark='-'
fi
progress_bar="${progress_bar}${mark}"
done
printf "Progress: ${progress_bar}\r"
ratio=$((ratio+1))
#ratio=`expr ${ratio} + 1`
if [ "${ratio}" -gt "${length}" ] ; then
ratio=1
fi
sleep 0.1
done
}
do_sth &
do_sth_pid=$(jobs -p | tail -1)
progress "${do_sth_pid}" &
progress_pid=$(jobs -p | tail -1)
wait "${do_sth_pid}"
printf "Progress: done \n"
下圖是程序運行的幾個狀態(tài)

到此這篇關(guān)于Shell腳本實現(xiàn)進度條的兩種方式的文章就介紹到這了,更多相關(guān)Shell 進度條內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux Shell腳本系列教程(七):腳本調(diào)試
這篇文章主要介紹了Linux Shell腳本系列教程(七):腳本調(diào)試,本文講解了Bash內(nèi)建調(diào)試功能和自定義調(diào)試功能等內(nèi)容,需要的朋友可以參考下2015-06-06

