Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Bash Progress Bar
# Bash Progress Bar:
# Function to draw progress bar
progressBar () {
# Calculate number of fill/empty slots in the bar
progress=$(echo "$progressBarWidth/$taskCount*$tasksDone" | bc -l)
fill=$(printf "%.0f\n" $progress)
if [ $fill -gt $progressBarWidth ]; then
# Percentage Calculation
percent=$(echo "100/$taskCount*$tasksDone" | bc -l)
percent=$(printf "%0.2f\n" $percent)
if [ $(echo "$percent>100" | bc) -gt 0 ]; then
# Output to screen
printf "\r["
printf "%${fill}s" '' | tr ' '
printf "%${empty}s" '' | tr ' '
printf "] $percent%% - $text "
## Collect task count
while [ $tasksDone -le $taskCount ]; do
# Do your task
(( tasksDone += 1 ))
# Add some friendly output
text=$(echo "somefile-$tasksDone.dat")
# Draw the progress bar
progressBar $taskCount $taskDone $text
sleep 0.01

This comment has been minimized.

Copy link

nlpthk commented Jan 11, 2017

Hey F1LT3R!

How I could use your progress bar to represent a running bash file? Also, any idea how to add time remaining?
Thanks so much for your help!


This comment has been minimized.

Copy link

oofnikj commented May 22, 2017

I was having a problem with the Unicode characters not displaying properly (Ubuntu 16.04). I found out that it's a known bug with GNU tr that it doesn't support Unicode (source), so I modified it to work with sed instead:
27 printf "%${fill}s" '' | sed 's/ /\o342\o226\o210/g'
28 printf "%${empty}s" '' | sed 's/ /\o342\o226\o221/g'

Hope this helps someone.


This comment has been minimized.

Copy link
Owner Author

F1LT3R commented Jul 14, 2017

@nlpthk, not sure what you are asking exactly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.