Bird
Raised Fist0
Bash Scriptingscripting~20 mins

Reading files line by line (while read) in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Line Reader Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this script reading a file line by line?
Consider a file named colors.txt with the following content:
red
green
blue

What will be the output of this script?
while read line; do
echo "$line"
done < colors.txt
Bash Scripting
while read line; do
echo "$line"
done < colors.txt
A
red
green
blue
Bred green blue
C
eulb
neerg
der
D
ed
green
blue
Attempts:
2 left
💡 Hint
Think about how read reads each line and how echo prints it.
💻 Command Output
intermediate
2:00remaining
What happens if you use a pipe with while read loop?
Given the same colors.txt file, what will this script output?
cat colors.txt | while read line; do
echo "$line"
done
Bash Scripting
cat colors.txt | while read line; do
echo "$line"
done
Ared green blue
B
red
green
blue
CNo output
D
eulb
neerg
der
Attempts:
2 left
💡 Hint
Pipes send the file content to the loop line by line.
💻 Command Output
advanced
2:00remaining
What error occurs with this incorrect while read syntax?
What error or output results from running this script?
while read line
  echo "$line"
done < colors.txt
Bash Scripting
while read line
  echo "$line"
done < colors.txt
ASyntax error: 'do' expected
BPrints all lines correctly
CNo output
DRuntime error: file not found
Attempts:
2 left
💡 Hint
Check the syntax for the while loop in bash.
🚀 Application
advanced
2:00remaining
How to count lines in a file using while read loop?
Which script correctly counts the number of lines in colors.txt using a while read loop?
A
count=0
while read line; do
  count=$count + 1
done &lt; colors.txt
echo $count
B
count=0
while read line; do
  count++
done &lt; colors.txt
echo $count
C
count=0
while read line; do
  count=$((count + 1))
done &lt; colors.txt
echo $count
D
count=0
while read line; do
  let count+1
done &lt; colors.txt
echo $count
Attempts:
2 left
💡 Hint
Use arithmetic expansion $(( )) to increment variables in bash.
🧠 Conceptual
expert
2:00remaining
Why does this while read loop skip the last line sometimes?
Consider this script:
while read line; do
echo "$line"
done < file.txt

If file.txt does not end with a newline character, what happens to the last line and why?
AAll lines print correctly regardless of newline
BThe last line is printed twice due to buffering
CThe script crashes with an error about missing newline
DThe last line is skipped because read expects a newline to finish reading a line
Attempts:
2 left
💡 Hint
Think about how the read command detects line endings.

Practice

(1/5)
1. What does the command while IFS= read -r line; do echo "$line"; done < file.txt do in a bash script?
easy
A. Deletes the contents of file.txt.
B. Reads the entire file at once and prints it.
C. Writes each line of file.txt to a new file.
D. Reads the file file.txt line by line and prints each line.

Solution

  1. Step 1: Understand the while read loop

    The loop reads input line by line from the redirected file file.txt.
  2. Step 2: Check the action inside the loop

    Each line read is stored in variable line and printed with echo.
  3. Final Answer:

    Reads the file file.txt line by line and prints each line. -> Option D
  4. Quick Check:

    Line-by-line reading = A [OK]
Hint: Remember: while read loops read files line by line [OK]
Common Mistakes:
  • Thinking it reads the whole file at once
  • Confusing input redirection with output
  • Ignoring the role of IFS= and -r
2. Which of the following is the correct syntax to read a file line by line in bash?
easy
A. while read line; do echo $line; done < file.txt
B. while read -r line; do echo $line; done > file.txt
C. while read line; do echo $line; done >> file.txt
D. while read line; do echo $line; done | file.txt

Solution

  1. Step 1: Identify input redirection for reading

    The correct way to read from a file is using input redirection: < file.txt.
  2. Step 2: Check the loop syntax

    while read line; do ... done is the standard loop to read lines.
  3. Final Answer:

    while read line; do echo $line; done < file.txt -> Option A
  4. Quick Check:

    Input redirection with < = C [OK]
Hint: Use < file.txt to feed file lines into the loop [OK]
Common Mistakes:
  • Using output redirection (>) instead of input (<)
  • Piping file name instead of redirecting input
  • Missing the -r option to prevent backslash escapes
3. What will be the output of this script if file.txt contains:
apple
banana
cherry

Script:
while IFS= read -r line; do echo "Fruit: $line"; done < file.txt
medium
A. Fruit: apple Fruit: banana Fruit: cherry
B. apple banana cherry
C. Fruit: apple banana cherry
D. Syntax error

Solution

  1. Step 1: Understand the loop reading each line

    The loop reads each line from file.txt separately.
  2. Step 2: Check the echo command

    Each line is printed prefixed with "Fruit: ".
  3. Final Answer:

    Fruit: apple Fruit: banana Fruit: cherry -> Option A
  4. Quick Check:

    Line prefixing with echo = B [OK]
Hint: Each loop iteration prints one line with prefix [OK]
Common Mistakes:
  • Expecting all lines printed on one line
  • Ignoring the prefix in echo
  • Confusing input and output redirection
4. Identify the error in this script snippet:
while read line; do echo $line; done file.txt
medium
A. Echo command syntax is wrong
B. Incorrect variable name used
C. Missing input redirection operator < before file.txt
D. Missing semicolon after read

Solution

  1. Step 1: Check how the file is provided to the loop

    The file must be redirected as input using < file.txt, not as an argument.
  2. Step 2: Confirm syntax correctness

    The rest of the syntax is correct; variable and echo usage are fine.
  3. Final Answer:

    Missing input redirection operator < before file.txt -> Option C
  4. Quick Check:

    Input redirection needed = D [OK]
Hint: Use < file.txt to feed file lines, not argument [OK]
Common Mistakes:
  • Passing filename as argument instead of redirecting input
  • Forgetting semicolon after read (optional here)
  • Misusing echo syntax
5. You want to read a file line by line and skip empty lines. Which script snippet correctly does this?
hard
A. while read line; do echo "$line"; done < file.txt | grep '^$'
B. while IFS= read -r line; do if [[ -n $line ]]; then echo "$line"; fi; done < file.txt
C. cat file.txt | while read line; do echo "$line"; done
D. while IFS= read -r line; do echo "$line"; done < file.txt

Solution

  1. Step 1: Understand skipping empty lines

    We need to check if the line is not empty using [[ -n $line ]].
  2. Step 2: Confirm reading and condition

    while IFS= read -r line; do if [[ -n $line ]]; then echo "$line"; fi; done < file.txt reads lines safely and prints only non-empty lines inside the loop.
  3. Final Answer:

    while IFS= read -r line; do if [[ -n $line ]]; then echo "$line"; fi; done < file.txt -> Option B
  4. Quick Check:

    Condition inside loop filters empty lines = A [OK]
Hint: Use if [[ -n $line ]] inside loop to skip empty lines [OK]
Common Mistakes:
  • Using external grep after loop (may lose variable scope)
  • Not checking for empty lines inside the loop
  • Using unnecessary cat command
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard