Shell腳本實(shí)現(xiàn)進(jìn)度條的兩種方式
1、腳本中各模塊(或函數(shù))運(yùn)行過(guò)程可以量化,則可以直接使用帶百分比的進(jìn)度條。
#!/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
如下圖,進(jìn)度條中’#'的數(shù)量和進(jìn)度條長(zhǎng)度成正比,printf打印每次只回車不換行,新的異常打印會(huì)覆蓋之前的打印,執(zhí)行完成后使用echo換行。
2、有些情況下你也許不知道程序什么時(shí)候結(jié)束,只是需要一個(gè)動(dòng)態(tài)的進(jìn)度條來(lái)表示程序正在運(yùn)行,比如進(jìn)度條由[----------]變成[>---------],進(jìn)度條里面的-不斷被>替換,當(dāng)所有的-都被替換后所有符號(hào)又重新變成-,直到程序結(jié)束運(yùn)行。
#!/bin/bash trap 'onCtrlC' INT function onCtrlC () { #捕獲CTRL+C,當(dāng)腳本被ctrl+c的形式終止時(shí)同時(shí)終止程序的后臺(tái)進(jìn)程 kill -9 ${do_sth_pid} ${progress_pid} echo echo 'Ctrl+C is captured' exit 1 } do_sth() { #運(yùn)行的主程序 sleep 10 } progress() { #進(jìn)度條程序 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"
下圖是程序運(yùn)行的幾個(gè)狀態(tài)
到此這篇關(guān)于Shell腳本實(shí)現(xiàn)進(jìn)度條的兩種方式的文章就介紹到這了,更多相關(guān)Shell 進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本換行問(wèn)題實(shí)戰(zhàn)記錄
換行相信大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于shell腳本換行問(wèn)題的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02linux shell查看當(dāng)前外網(wǎng)IP
這篇文章主要介紹了如何在LINUX操作系統(tǒng)下查看本地IP地址(在SHELL下)的相關(guān)資料,需要的朋友可以參考下2015-09-09Linux下is not in the sudoers file的解決
當(dāng)我們使用sudo命令切換用戶的時(shí)候可能會(huì)遇到提示以下錯(cuò)誤:用戶名 is not in the sudoers file.本文給大家分享原因分析及解決方案,感興趣的朋友跟隨小編一起看看吧2023-02-02Linux實(shí)現(xiàn)文件定期本地備份/異地備份/刪除備份的腳本
數(shù)據(jù)備份的意義就在于,當(dāng)受到網(wǎng)絡(luò)攻擊、入侵、電源故障或者操作失誤等事故的發(fā)生后,可以完整、快速、簡(jiǎn)捷、可靠地恢復(fù)原有系統(tǒng)。本文為大家準(zhǔn)備了文件定期本地備份/異地備份/刪除備份的腳本,希望對(duì)你們有所幫助2022-10-10