2015-04-05 91 views
0

我有以下腳本,它的工作原理,但我不知道它是如何工作的,如何百分比增加在計

那是什麼表通過使用任何作爲包含變量魔術百分比?

#!/bin/bash -x 
cnt="`rpm -qa | wc -l`" 
pct="`echo \"100/$cnt\" | bc -l`" 
whatever=0 
counter=0 


for file in `rpm -qa`; do 
    counter=$((counter+1)) 
    whatever=`echo $whatever+$pct | bc -l` 
    echo $whatever | cut -d"." -f1 
    sleep 0.1 
    echo "XXX" 
    echo Paquete $counter: 
    echo $file: $(rpm -V $file) 
    echo "XXX" 
done | dialog --backtitle "Verificando RPMs" --title "Progreso" --gauge "Procesando RPM's ..." 15 70 0 

回答

1

沒有魔法。 for循環明確寫入$whatever(在小數點截斷)到dialog的標準輸入,而dialog使用從標準輸入讀取的整數流設置標尺位置。

for loop還通過輸出XXX標記之間的新文本來更改標尺的文本。

man dialog從引用(章節上--gauge):

甲計框顯示沿着箱的底部的米。儀表顯示百分比。從標準輸入讀取新的百分比,每行一個整數。儀表更新以反映每個新百分比。如果標準輸入讀取字符串「XXX」,則後面的第一行將被視爲整數百分比,然後使用到達另一個「XXX」的後續行作爲新提示。在標準輸入上達到EOF時,量表退出。

+0

但是,對話框如何知道,無論是百分比,而不是例如計數器變量? – sebelk 2015-04-05 04:48:00

+1

@sebelk:因爲整行是一個整數。根據手冊頁,第一個'XXX'後面的行應該是百分比,但該行以單詞(Paquete)開始,因此量表小部件假定它是文本的一部分。在下一個'XXX'之前的其餘行肯定是文本,不管它們是否是整數。 – rici 2015-04-05 04:54:30