#! /bin/sh MAXIMUM_VALUE=100 LENGTH=80 DISPLAY_PATTERN="=" INDICATOR=">" BLANK_PATTERN=" " function progressbar { VALUE=$1 if (( VALUE > MAXIMUM_VALUE )) then return 1 fi BAR_LENGTH=`expr ${LENGTH} - 9` CURRENT_BAR_LENGTH=0 if (( VALUE == 0 )) then CURRENT_BAR_LENGTH=0 else if (( VALUE == MAXIMUM_VALUE )) then CURRENT_BAR_LENGTH=${BAR_LENGTH} else CURRENT_BAR_LENGTH=`echo "scale=0; ${VALUE} * ${BAR_LENGTH} / ${MAXIMUM_VALUE}" | bc` fi fi PASTY="" for (( PG = 1; PG <= ${BAR_LENGTH}; PG++ )) do if (( PG == CURRENT_BAR_LENGTH && VALUE != MAXIMUM_VALUE )) then PASTY="${PASTY}${INDICATOR}" continue fi if (( PG <= CURRENT_BAR_LENGTH )) then PASTY="${PASTY}${DISPLAY_PATTERN}" continue fi PASTY="${PASTY}${BLANK_PATTERN}" done if [[ `echo ${PASTY} | tr -d [:blank:]`x == ""x ]] then PASTY="|" fi printf "\r[%-${BAR_LENGTH}s] %.1f%% " ${PASTY} $(echo "scale=3; ${VALUE} / ${MAXIMUM_VALUE} * 100" | bc) } #################################### USAGE ##################################### MAXIMUM_VALUE=1101 LENGTH=100 DISPLAY_PATTERN=")" INDICATOR=">" BLANK_PATTERN="-" for (( CV = 1; CV <= ${MAXIMUM_VALUE}; CV++ )) do progressbar ${CV} #sleep 0.03 done echo |
|
来自: 魔奇工作室 > 《Linux/Unix/Shell》