Shell脚本实现进度条的两种方式(shell脚本运行程序)不要告诉别人

随心笔谈12个月前发布 admin
71 0

#!/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”

© 版权声明

相关文章