Bird
Raised Fist0
Bash Scriptingscripting~20 mins

ShellCheck for static analysis in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
ShellCheck Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What does ShellCheck report for this script?
Given the following Bash script, what warning or error will ShellCheck produce?
Bash Scripting
echo "User input is: $1"
if [ $1 -eq 10 ]; then
  echo "Input is ten"
fi
ASC1009: The mentioned syntax error was in this if statement.
BNo warnings, script is clean.
CSC2086: Double quote to prevent globbing and word splitting.
DSC2154: $1 is referenced but not assigned.
Attempts:
2 left
💡 Hint
ShellCheck often warns about unquoted variables in test conditions.
📝 Syntax
intermediate
2:00remaining
Which script will pass ShellCheck without errors?
Select the Bash script snippet that will NOT produce any ShellCheck warnings or errors.
Afor file in *.txt; do echo ${file}; done; echo $file
Bfor file in *.txt; do echo "$file"; done
Cfor file in *.txt; do echo ${file}; done
Dfor file in *.txt; do echo $file; done
Attempts:
2 left
💡 Hint
ShellCheck warns about unquoted variables that may cause word splitting.
🔧 Debug
advanced
2:00remaining
Identify the ShellCheck warning for this script
What specific ShellCheck warning will this script produce?
Bash Scripting
#!/bin/bash

read -p "Enter your name: " name
if [ "$name" = "" ]; then
  echo "No name entered"
fi
ASC2143: Use grep -q instead of comparing output with -eq.
BNo warnings, script is clean.
CSC2006: Use $(...) instead of backticks.
DSC2162: read without -r will mangle backslashes.
Attempts:
2 left
💡 Hint
ShellCheck warns about read command usage without -r option.
🧠 Conceptual
advanced
2:00remaining
Why does ShellCheck warn about this variable usage?
Consider this snippet: filename=$1 if [ -f $filename ]; then echo "File exists" fi Why does ShellCheck warn about the test condition?
ABecause $filename is unquoted, it may cause word splitting or globbing issues.
BBecause $filename is not declared as a local variable.
CBecause -f test requires an absolute path, not a variable.
DBecause the if statement syntax is incorrect.
Attempts:
2 left
💡 Hint
Think about what happens if the filename contains spaces.
🚀 Application
expert
2:00remaining
What is the output of running ShellCheck on this script?
Given this script: #!/bin/bash for i in {1..3} do echo "Number: $i" done What output will ShellCheck produce?
ANo warnings or errors, script is clean.
BSC2034: i appears unused in the loop.
CSC1009: Syntax error near unexpected token '{1..3}'.
DSC2086: Double quote to prevent globbing and word splitting.
Attempts:
2 left
💡 Hint
Brace expansion is valid in Bash and commonly used in loops.

Practice

(1/5)
1. What is the main purpose of using ShellCheck in shell scripting?
easy
A. To find errors and suggest fixes before running the script
B. To execute the script faster
C. To convert shell scripts to Python
D. To add colors to the terminal output

Solution

  1. Step 1: Understand what ShellCheck does

    ShellCheck is a tool that analyzes shell scripts without running them to find mistakes.
  2. Step 2: Identify the main benefit

    It helps catch errors early, like missing quotes or bad syntax, making scripts safer.
  3. Final Answer:

    To find errors and suggest fixes before running the script -> Option A
  4. Quick Check:

    ShellCheck finds errors [OK]
Hint: ShellCheck checks scripts for errors before execution [OK]
Common Mistakes:
  • Thinking ShellCheck runs the script
  • Believing it speeds up script execution
  • Confusing it with a code converter
2. Which of the following is the correct way to run ShellCheck on a script named myscript.sh?
easy
A. bash shellcheck myscript.sh
B. checkshell myscript.sh
C. run shellcheck myscript.sh
D. shellcheck myscript.sh

Solution

  1. Step 1: Recall the ShellCheck command syntax

    The correct command to run ShellCheck is simply shellcheck followed by the script name.
  2. Step 2: Verify the options

    Options B, C, and D use incorrect command names or extra words.
  3. Final Answer:

    shellcheck myscript.sh -> Option D
  4. Quick Check:

    Use 'shellcheck scriptname' [OK]
Hint: Use 'shellcheck' command followed by script name [OK]
Common Mistakes:
  • Typing 'checkshell' instead of 'shellcheck'
  • Adding extra words like 'run' before the command
  • Using 'bash shellcheck' which is invalid
3. Given this script echo Hello $name and running shellcheck script.sh, what warning will ShellCheck most likely show?
medium
A. SC1000: Syntax error near unexpected token.
B. SC2001: Use 'sed' instead of 'echo'.
C. SC2086: Double quote to prevent globbing and word splitting.
D. No warnings, script is perfect.

Solution

  1. Step 1: Understand ShellCheck's common warnings

    ShellCheck warns when variables are unquoted because it can cause word splitting or globbing.
  2. Step 2: Match warning to the script

    The script uses $name without quotes, so ShellCheck will warn about missing quotes (SC2086).
  3. Final Answer:

    SC2086: Double quote to prevent globbing and word splitting. -> Option C
  4. Quick Check:

    Unquoted variables cause SC2086 warning [OK]
Hint: Look for unquoted variables to spot SC2086 warnings [OK]
Common Mistakes:
  • Expecting syntax errors for simple echo
  • Thinking no warning appears for unquoted variables
  • Confusing warning codes with unrelated messages
4. You have this script snippet:
if [ $count -eq 10 ]; then
echo "Count is 10"
fi

ShellCheck reports an error. What is the best fix?
medium
A. Add quotes around $count: if [ "$count" -eq 10 ]; then
B. Remove the spaces inside [ ]
C. Change -eq to ==
D. Add a semicolon after echo statement

Solution

  1. Step 1: Identify the ShellCheck warning cause

    Using $count without quotes can cause errors if $count is empty or contains spaces.
  2. Step 2: Apply the fix

    Adding quotes around $count ensures the test works safely even if the variable is empty.
  3. Final Answer:

    Add quotes around $count: if [ "$count" -eq 10 ]; then -> Option A
  4. Quick Check:

    Quote variables in tests to avoid errors [OK]
Hint: Always quote variables inside [ ] tests [OK]
Common Mistakes:
  • Removing spaces inside [ ] which breaks syntax
  • Using == instead of -eq for numbers
  • Adding unnecessary semicolons
5. You want to write a script that reads a filename from user input and safely prints its contents. Which ShellCheck advice should you follow?
hard
A. Use backticks instead of $( ) for command substitution
B. Always quote variables when using them, e.g., cat "$filename"
C. Avoid quoting variables to allow filename expansion
D. Use eval to run commands with variables

Solution

  1. Step 1: Understand safe variable usage

    Quoting variables prevents word splitting and globbing, which can cause errors or security issues.
  2. Step 2: Apply ShellCheck best practice

    ShellCheck recommends quoting variables like "$filename" when used in commands like cat.
  3. Final Answer:

    Always quote variables when using them, e.g., cat "$filename" -> Option B
  4. Quick Check:

    Quote variables to avoid unsafe expansions [OK]
Hint: Quote variables to prevent unsafe expansions [OK]
Common Mistakes:
  • Using backticks which are outdated
  • Not quoting variables causing errors
  • Using eval which can be dangerous
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