Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bash Progress Bar
#!/bin/bash
# Bash Progress Bar: https://gist.github.com/F1LT3R/fa7f102b08a514f2c535
progressBarWidth=20
# 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
fill=$progressBarWidth
fi
empty=$(($fill-$progressBarWidth))
# Percentage Calculation
percent=$(echo "100/$taskCount*$tasksDone" | bc -l)
percent=$(printf "%0.2f\n" $percent)
if [ $(echo "$percent>100" | bc) -gt 0 ]; then
percent="100.00"
fi
# Output to screen
printf "\r["
printf "%${fill}s" '' | tr ' '
printf "%${empty}s" '' | tr ' '
printf "] $percent%% - $text "
}
## Collect task count
taskCount=33
tasksDone=0
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
done
echo
@nlpthk

This comment has been minimized.

Copy link

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!

@oofnikj

This comment has been minimized.

Copy link

commented May 22, 2017

Hi,
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.

@F1LT3R

This comment has been minimized.

Copy link
Owner Author

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.