ShellCheck for static analysis in Bash Scripting - Time & Space Complexity
We want to understand how the time ShellCheck takes to analyze a script changes as the script gets bigger.
How does the analysis time grow when the script has more lines or commands?
Analyze the time complexity of running ShellCheck on a bash script file.
#!/bin/bash
# Example script to check
for file in *.txt; do
echo "Processing $file"
done
# Run ShellCheck
shellcheck example.sh
This code runs ShellCheck on a script file to find possible errors or warnings.
ShellCheck reads and analyzes each line and command in the script.
- Primary operation: Parsing and checking each line of the script.
- How many times: Once per line or command in the script.
As the script gets longer, ShellCheck has more lines to check, so the time grows roughly in proportion to the number of lines.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 lines | About 10 checks |
| 100 lines | About 100 checks |
| 1000 lines | About 1000 checks |
Pattern observation: The work grows steadily as the script grows longer, roughly one check per line.
Time Complexity: O(n)
This means the time ShellCheck takes grows in a straight line with the number of lines in the script.
[X] Wrong: "ShellCheck runs instantly no matter how big the script is."
[OK] Correct: ShellCheck must read and analyze every line, so bigger scripts take more time.
Understanding how tools like ShellCheck scale helps you reason about script quality checks in real projects.
"What if the script contains many repeated functions? How would that affect ShellCheck's time complexity?"
Practice
ShellCheck in shell scripting?Solution
Step 1: Understand what ShellCheck does
ShellCheck is a tool that analyzes shell scripts without running them to find mistakes.Step 2: Identify the main benefit
It helps catch errors early, like missing quotes or bad syntax, making scripts safer.Final Answer:
To find errors and suggest fixes before running the script -> Option AQuick Check:
ShellCheck finds errors [OK]
- Thinking ShellCheck runs the script
- Believing it speeds up script execution
- Confusing it with a code converter
myscript.sh?Solution
Step 1: Recall the ShellCheck command syntax
The correct command to run ShellCheck is simplyshellcheckfollowed by the script name.Step 2: Verify the options
Options B, C, and D use incorrect command names or extra words.Final Answer:
shellcheck myscript.sh -> Option DQuick Check:
Use 'shellcheck scriptname' [OK]
- Typing 'checkshell' instead of 'shellcheck'
- Adding extra words like 'run' before the command
- Using 'bash shellcheck' which is invalid
echo Hello $name and running shellcheck script.sh, what warning will ShellCheck most likely show?Solution
Step 1: Understand ShellCheck's common warnings
ShellCheck warns when variables are unquoted because it can cause word splitting or globbing.Step 2: Match warning to the script
The script uses$namewithout quotes, so ShellCheck will warn about missing quotes (SC2086).Final Answer:
SC2086: Double quote to prevent globbing and word splitting. -> Option CQuick Check:
Unquoted variables cause SC2086 warning [OK]
- Expecting syntax errors for simple echo
- Thinking no warning appears for unquoted variables
- Confusing warning codes with unrelated messages
if [ $count -eq 10 ]; then echo "Count is 10" fi
ShellCheck reports an error. What is the best fix?
Solution
Step 1: Identify the ShellCheck warning cause
Using$countwithout quotes can cause errors if$countis empty or contains spaces.Step 2: Apply the fix
Adding quotes around$countensures the test works safely even if the variable is empty.Final Answer:
Add quotes around $count: if [ "$count" -eq 10 ]; then -> Option AQuick Check:
Quote variables in tests to avoid errors [OK]
- Removing spaces inside [ ] which breaks syntax
- Using == instead of -eq for numbers
- Adding unnecessary semicolons
Solution
Step 1: Understand safe variable usage
Quoting variables prevents word splitting and globbing, which can cause errors or security issues.Step 2: Apply ShellCheck best practice
ShellCheck recommends quoting variables like"$filename"when used in commands likecat.Final Answer:
Always quote variables when using them, e.g.,cat "$filename"-> Option BQuick Check:
Quote variables to avoid unsafe expansions [OK]
- Using backticks which are outdated
- Not quoting variables causing errors
- Using eval which can be dangerous
Ready to prove it?
Pass the test and this pattern moves unknown
