Report generation script in Bash Scripting - Time & Space Complexity
When running a report generation script, it is important to know how the time it takes grows as the data size grows.
We want to understand how the script's work increases when there are more items to process.
Analyze the time complexity of the following code snippet.
#!/bin/bash
files=/var/log/*.log
for file in $files; do
echo "Processing $file"
lines=$(wc -l < "$file")
echo "Lines: $lines"
# Simulate report generation
sleep 0.1
echo "Report generated for $file"
done
This script lists all log files in a folder, then for each file it counts lines and simulates generating a report.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping over each log file to process it.
- How many times: Once for each file found in the directory.
As the number of log files increases, the script runs the loop more times, doing similar work each time.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 file processes |
| 100 | About 100 file processes |
| 1000 | About 1000 file processes |
Pattern observation: The work grows directly with the number of files; doubling files doubles work.
Time Complexity: O(n)
This means the time to finish grows in a straight line with the number of files to process.
[X] Wrong: "The script runs in constant time because it just loops over files once."
[OK] Correct: Even though the loop runs once, it runs once per file, so more files mean more work and more time.
Understanding how loops affect time helps you explain script performance clearly and shows you can reason about scaling work.
"What if the script also read every line inside each file? How would the time complexity change?"
Practice
Solution
Step 1: Understand the script's goal
A report generation script is designed to gather data and save it for review.Step 2: Match purpose with options
Only To automatically collect and save information into a file describes collecting and saving information automatically.Final Answer:
To automatically collect and save information into a file -> Option AQuick Check:
Report generation = collect and save info [OK]
- Confusing report generation with compiling code
- Thinking it deletes files
- Assuming it opens GUIs
Solution
Step 1: Identify the correct shebang for bash
The first line in a bash script must be#!/bin/bashto specify the interpreter.Step 2: Check other options
Options B, C, and D are either for other languages or commands, not the script start line.Final Answer:
#!/bin/bash -> Option CQuick Check:
Shebang for bash = #!/bin/bash [OK]
- Using wrong interpreter path
- Starting with commands instead of shebang
- Confusing bash with python
#!/bin/bash filename="report.txt" echo "Report generated on: $(date)" > $filename echo "User count: $(who | wc -l)" >> $filename cat $filename
Solution
Step 1: Analyze echo commands and redirection
The first echo writes the date line to report.txt (overwrite). The second echo appends user count.Step 2: Understand the final cat command
cat prints the contents of report.txt, showing both lines.Final Answer:
Prints current date and number of logged-in users in report.txt -> Option BQuick Check:
echo > overwrite, echo >> append, cat prints file [OK]
- Confusing > and >> operators
- Thinking variable usage is wrong
- Assuming file is empty
#!/bin/bash filename=report.txt echo "Start report" > $filename echo "Date: $(date)" > $filename cat $filename
Solution
Step 1: Check file redirection operators
The first echo writes "Start report" to the file. The second echo uses > again, overwriting the file.Step 2: Understand the effect on output
Because of overwrite, the first line is lost. Only the date line remains in the file.Final Answer:
The second echo overwrites the file, losing the first line -> Option AQuick Check:
Using > twice overwrites file [OK]
- Assuming > appends instead of overwriting
- Thinking variable is undefined
- Blaming cat command
files_report.txt. Which script snippet correctly does this?Solution
Step 1: Understand the requirements
The report must list files with sizes and save to files_report.txt.Step 2: Analyze options for correct commands and output
#!/bin/bash ls -lh > files_report.txt wc -l >> files_report.txt usesls -lhfor human-readable sizes and writes to the file. Then it appends the line count withwc -l, adding useful info.Step 3: Check other options
#!/bin/bash ls -l > files_report.txt lacks human-readable sizes. #!/bin/bash ls -l >> files_report.txt ls -a > files_report.txt overwrites file after appending, losing data. #!/bin/bash ls -lh > files_report.txt misses line count info.Final Answer:
Option D correctly lists files with sizes and appends line count to the report -> Option DQuick Check:
ls -lh for sizes + wc -l appended = correct report [OK]
- Overwriting file after appending
- Not using human-readable size option
- Missing extra useful info like line count
Ready to prove it?
Pass the test and this pattern moves unknown
