Skip to main content

顯示進度 progress

範例:顯示進度條
#!/bin/bash
#
# inprogress.sh
# Description: this script may show some simple motion in foreground
# when main program in progress.
# Author: A-Lang (alang[dot]hsu[at]gmail[dot]com)

trap 'kill $BG_PID;echo;exit' 1 2 3 15

function waiting
{
INTERVAL=0.5
TT='->——
–>—–
—>—-
—->—
—–>–
——>-
——->
——<-
—–<–
—-<—
—<—-
–<—–
-<——
<——-';
echo -ne "Please waiting… "
while true
do
for j in $TT
do
echo -ne "Please be patient, $j"
sleep $INTERVAL
done

done
}

# Start the waiting, where place your main program.
waiting &
BG_PID=$!

sleep 10

# End of the waiting
kill $BG_PID
echo

範例:模擬Linux loading kernel

#!/bin/sh
#輸出"."進度條函數,兼容bsh、ksh、bash
#首先trap 1 2 3 15信號,重要

trap 'kill $BG_PID;echo;exit' 1 2 3 15

function dots
{
stty -echo >/dev/null 2>&1
while true
do
  echo ".c"
  sleep 1 
done
stty echo
echo
}

#———————————————
# 主程序開始
#———————————————

#首先使dots函數後台運行
dots &
BG_PID=$!

#開始程序主體,本例中執行休眠10秒
#注意必要時使用 >/dev/null 2>&1關閉輸出和錯誤回顯,避免破壞顯示
sleep 10

#程序結尾注意kill dots,否則dots會一直執行
kill $BG_PID

範例:模擬FreeBSD loading kernel

#!/bin/sh
#輸出"*"進度條函數,兼容bsh、ksh、bash
#首先trap 1 2 3 15信號,重要

trap 'kill $BG_PID;echo;exit' 1 2 3 15

function rotate
{
INTERVAL=0.1         #進度條旋轉時間0.1秒,注意並不是所有系統都支持非整數
TCOUNT="0"                
stty -echo >/dev/null 2>&1
while :
do
TCOUNT=`expr $TCOUNT + 1`
   case $TCOUNT in
   "1") echo '-'" c"
   sleep $INTERVAL
   ;;
   "2") echo ''" c"
   sleep $INTERVAL
   ;;
   "3") echo "| c"
   sleep $INTERVAL
   ;;
   "4") echo "/ c"
   sleep $INTERVAL
   ;;
   *) TCOUNT="0" ;;
   esac
done
stty echo
}

#———————————————
# 主程序開始
#———————————————

#首先使rotate函數後台運行
rotate &
ROTATE_PID=$!

#開始程序主體,本例中執行休眠10秒
#注意必要時使用 >/dev/null 2>&1關閉輸出和錯誤回顯,避免破壞顯示
sleep 10

#程序結尾注意kill dots,否則dots會一直執行;清除多餘字符
kill -9 $ROTATE_PID
echo "  "
範例:整合 LED 的顯示
#!/bin/bash

echo "Starting to format the disk...."

# Start to blink the LED
/root/bin/led.sh b
/root/bin/led.sh blink &
led_pid=$!

# Main codes
echo "formating hdisk2..."
sleep 10

# When the main codes is ending up
# Stop to blink the LED
kill -9 $led_pid
wait $led_pid 2>/dev/null
sleep 2

# Making sure the LED is ON with Blue
/root/bin/led.sh b
echo "done"

led.sh 用來控制 LED 的閃燈

wait .... 這行用來隱藏 killed ... 的文字訊息