Shell中的進度指示器

2021-06-06 18:26:47 字數 2315 閱讀 1943

相信大家做shell指令碼時,經常遇到耗費時間的問題,這時如果有乙個進度指示器豈不更好,這在其他語言中很容易就實現了,在shell裡也不難,看下邊的幾種方法:

(1)使用一系列圓點來指示進度:利用每隔幾秒就列印乙個點來指示,看原始碼:

#! /bin/ksh

while(true)

do echo -n "."

sleep 1

done

這裡每隔1秒列印乙個點表示進度情況。其實更多情況下,我們會把這個進度指示操作放在後台執行,前台做更重要的工作,當前臺工作做完後,然後殺死這個後台指示程序的部分,如下:

#! /bin/ksh

while(true)

do echo -n "."

sleep 1

done &

bg_pid=$!

sleep 10

kill $bg_pid

看到了吧,這裡所謂的前台重要的工作就是sleep 10(根據需要自己換就可以了),當完成了,就用kill殺掉指定程序的部分,這裡利用shell內部引數$!來獲取程序,關於內部引數剛好我也總結了一下,如下圖:

你要覺得輸出進度資訊做成模組更好,那也挺簡單,比如做乙個函式啦,也可以放在單獨的指令碼裡,我這裡就不說了。

(2)通過旋轉的線指示進度:這種方式我就不解釋了,現在好多好多的都是這樣的,直接看指令碼:

#! /bin/ksh

function rotate

rotate &

rotate_pid=$!

sleep 20

kill -9 $rotate_pid

這裡用到了函式,獲得上乙個程序id(剛說過),還有就是echo控制符,因為我們要在同乙個位置每過一段時間就將原來的清除掉重新寫入新的內容,echo選項我剛好也總結了如下:

(3)最後一種,莫過於倒計時了,各大系統都採用倒計時的方式來告訴使用者的等待時間,這裡就來說說這種方法,指令碼如下:

#!/bin/ksh

if [ $# -ne 1 ]; #輸入命令格式檢查:名稱+倒數時間

then

echo "usage: countdown.ksh [seconds]"

exit 0

fiif [ $1 -gt 0 -a $1 -lt 1000 ];

then

s=$1 #s指定為輸入的

echo -e "seconds remaining: $s\c"

echo -e "\n"

sleep 1

while [ $s -gt 0 ]; #如果時間不為0,就繼續迴圈

doif [ $s -lt "10" ]; #如果小於10,就向後退兩位,再輸出

then

echo -e "\b\b\c"

echo -e " \c"

echo -e "\b\b\c"

elif [ $s -ge "10" -a $s -lt "100" ]; #如果大等於10但小於100,就向後退三位,再輸出

then

echo -e "\b\b\b\c"

echo -e " \c"

echo -e "\b\b\b\c"

elif [ $s -ge "100" -a $s -lt "1000" ]; #如果大等於100但小於1000,就向後退四位,再輸出

then

echo -e "\b\b\b\b\c"

echo -e " \c"

echo -e "\b\b\b\b\c"

fiecho -e "$s\c"

((s = $s - 1))

sleep 1

done

echo ""

else

echo "invalid input ==> $1"

echo "range 1 - 999 seconds"

echo "exiting..."

exit 0

fi

好了,這三種方法,應該足夠控制你對時間進度的了解情況了,裡邊的指令碼原始碼,特別是最後乙個,我就不說了,shell就這樣,不太好說清楚,只有試了的你才能明白其中的真諦哦.

進度指示器

uiprogressview 進度指示器 uiprogressview 與uiactivityindicatorview 相似,只不過它提供了乙個介面讓你可以顯示乙個類似進度條的東西,這樣就能讓使用者知道當前操作完成了多少 告知使用者離操作結束還多遠 一.建立 uiprogressview prog...

使用 Shell 指令碼實現安裝進度指示器

helm3 k8s 資源物件管理工具 部落格專欄 bin bash function killproc function proc name tput sc while true dofor roate in do tput rc tput ed printf 033 1 36m s 033 0m ...

MFC進度條指示器的製作

標準的進度條控制項是不帶指示器的,也沒用函式供我們去實現。我們看到的有些進度條指示器是在進度條控制項中放置乙個靜態文字控制項而製成的。具體實現方法如下 1,處理當前視窗的反射訊息wm ctlcolor,即新增hbrush onctlcolor cdc pdc,cwnd pwnd,uint nctlc...