📖 Scenario: You are writing a bash script to simulate a task that takes some time. You want to show a progress indicator to the user so they know the script is working.
🎯 Goal: Create a bash script that shows a simple progress indicator using dots printed one by one with a delay.
📋 What You'll Learn
Create a variable to hold the total number of steps.
Create a loop that runs from 1 to the total number of steps.
Print a dot . for each step without a newline.
Add a short delay between printing each dot.
Print a newline after the loop finishes.
💡 Why This Matters
🌍 Real World
Progress indicators help users know that a script or program is running and not frozen. This is common in installers, data processing scripts, or any long task.
💼 Career
Many automation and scripting jobs require showing progress or status updates to users or logs. Knowing how to create simple progress indicators is a useful skill.
Progress0 / 4 steps
1
Set the total number of steps
Create a variable called total_steps and set it to 10.
Bash Scripting
Hint
Use total_steps=10 to create the variable.
2
Create a loop to run through the steps
Write a for loop using i that runs from 1 to total_steps.
Bash Scripting
Hint
Use for i in $(seq 1 $total_steps); do to start the loop.
3
Print a dot for each step with a delay
Inside the loop, print a dot . without a newline using echo -n. Then add a delay of 0.5 seconds using sleep 0.5.
Bash Scripting
Hint
Use echo -n "." to print without newline and sleep 0.5 to pause.
4
Print a newline after the progress
After the loop, print a newline using echo to move to the next line.
Bash Scripting
Hint
Use echo without arguments to print a newline.
Practice
(1/5)
1. What is the main purpose of using a progress indicator in a bash script?
easy
A. To print all output to a file instead of the screen
B. To speed up the execution of the script
C. To stop the script if an error occurs
D. To show the user that a long-running task is still working
Solution
Step 1: Understand what progress indicators do
Progress indicators provide visual feedback during long tasks to reassure users the script is running.
Step 2: Identify the correct purpose
Among the options, only showing the user the task is still working matches the purpose of progress indicators.
Final Answer:
To show the user that a long-running task is still working -> Option D
Quick Check:
Progress indicator purpose = show task progress [OK]
Hint: Progress indicators show task status, not speed or errors [OK]
Common Mistakes:
Thinking progress indicators speed up scripts
Confusing progress indicators with error handling
Assuming progress indicators redirect output
2. Which of the following bash code snippets correctly updates the same line to show a spinner?
easy
A. echo -ne "|\r"; sleep 1; echo -ne "/\r"
B. echo "|"; sleep 1; echo "/"
C. echo -n "|"; sleep 1; echo -n "/"
D. echo -e "|\n"; sleep 1; echo -e "/\n"
Solution
Step 1: Understand how to update the same line in bash
Using echo -ne with \r returns the cursor to the start of the line to overwrite it.
Step 2: Check each option for correct usage
echo -ne "|\r"; sleep 1; echo -ne "/\r" uses echo -ne "|\r" and echo -ne "/\r", which updates the same line. Others print new lines or lack -e or -n.
Hint: Use echo -ne and \r to overwrite the same line [OK]
Common Mistakes:
Using echo without -n or -e flags
Using \n instead of \r to update line
Printing spinner on new lines instead of same line
3. What will be the output of this bash snippet?
for i in {1..3}; do
echo -ne "Processing $i...\r"
sleep 1
done
echo "Done!"
medium
A. Processing 1...
Processing 2...
Processing 3...
Done!
B. Processing 3...
Done!
C. Processing 1...Processing 2...Processing 3...Done!
D. Done!
Processing 3...
Solution
Step 1: Understand echo -ne with \r inside the loop
Each loop iteration prints 'Processing i...' and returns cursor to line start, overwriting previous output.
Step 2: Determine final visible output after loop
Only the last 'Processing 3...' remains visible, then 'Done!' prints on a new line.
Final Answer:
Processing 3...
Done! -> Option B
Quick Check:
\r overwrites line, last iteration visible [OK]
Hint: Remember \r returns cursor, overwriting previous line [OK]
Common Mistakes:
Thinking all lines print separately
Confusing \r with \n
Ignoring that echo -ne prevents newline
4. Identify the error in this bash spinner script snippet:
spinner="|/-\\"
while true; do
for i in $(seq 0 3); do
echo -ne "${spinner:$i:1}\r"
sleep 0.2
done
done
medium
A. The script will cause an infinite loop without exit
B. The for loop uses incorrect sequence range
C. The spinner string is missing characters
D. The substring syntax ${spinner:$i:1} is invalid in bash
Solution
Step 1: Analyze the loop structure
The outer while true loop runs forever without any exit condition.
Step 2: Check for exit or break statements
No break or exit is present, so the spinner runs infinitely, which may be unintended.
Final Answer:
The script will cause an infinite loop without exit -> Option A
Quick Check:
while true without break causes infinite loop [OK]
Hint: Check loops for exit conditions to avoid infinite loops [OK]
Common Mistakes:
Assuming infinite loops are errors always
Confusing substring syntax with error
Ignoring that spinner string is correct
5. You want to create a progress bar in bash that fills from 0% to 100% in 10 steps, updating on the same line. Which approach correctly implements this?
hard
A. Use echo without -n or -e flags inside the loop to print progress
B. Print all '#' characters at once, then sleep 10 seconds
C. Use a loop from 1 to 10, print '#' repeated i times with echo -ne and \r, then sleep
D. Use multiple echo commands without \r to print progress on new lines
Solution
Step 1: Understand progress bar update method
To update on the same line, use echo -ne with \r to overwrite the line each iteration.
Step 2: Implement loop with repeated '#' characters
Loop from 1 to 10, print '#' repeated i times, then sleep to simulate progress.
Final Answer:
Use a loop from 1 to 10, print '#' repeated i times with echo -ne and \r, then sleep -> Option C
Quick Check:
Loop + echo -ne + \r = progress bar update [OK]
Hint: Use echo -ne with \r and repeated chars in loop [OK]
Common Mistakes:
Printing progress on new lines instead of same line
Not using echo -n or -e flags
Printing all progress at once without updates
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.