Bird
Raised Fist0
Bash Scriptingscripting~3 mins

Why test command and [ ] syntax in Bash Scripting? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

What if your script could ask itself questions and never get confused?

The Scenario

Imagine you want to check if a file exists before using it in your script. You open the file manager, look for the file, then decide what to do next. Doing this for many files or conditions means lots of clicking and guessing.

The Problem

Manually checking conditions like file existence or comparing values is slow and easy to forget. It's like trying to remember every step without a checklist. Mistakes happen, and your script might break or behave unexpectedly.

The Solution

The test command and its shortcut [ ] let you quickly check conditions inside your script. They act like smart questions your script asks itself to decide what to do next, making your script reliable and clear.

Before vs After
✗ Before
if file exists then
  do something
fi
✓ After
if [ -f filename ]; then
  do something
fi
What It Enables

It lets your script make smart decisions automatically, like checking files or comparing values, so you don't have to do it by hand.

Real Life Example

Before running a backup, your script checks if the backup folder exists using [ -d /backup ]. If it's missing, the script creates it, preventing errors and saving you from manual fixes.

Key Takeaways

Manual checks are slow and error-prone.

test and [ ] let scripts check conditions easily.

This makes scripts smarter and more reliable.

Practice

(1/5)
1. What does the [ -f filename ] test check in a bash script?
easy
A. If filename is a directory
B. If filename is empty
C. If filename is executable
D. If filename exists and is a regular file

Solution

  1. Step 1: Understand the -f test

    The -f option in [ ] checks if the file exists and is a regular file (not a directory or special file).
  2. Step 2: Compare with other options

    -d checks for directory, -x for executable, and -s for non-empty file, so they don't match.
  3. Final Answer:

    If filename exists and is a regular file -> Option D
  4. Quick Check:

    -f means regular file check [OK]
Hint: Remember: -f means regular file exists [OK]
Common Mistakes:
  • Confusing -f with -d for directories
  • Forgetting spaces inside [ ]
  • Using filename without quotes causing errors
2. Which of the following is the correct syntax to test if variable var is equal to string hello in bash?
easy
A. [ $var = hello ]
B. [ $var == hello ]
C. [ "$var" = "hello" ]
D. [ "$var" == hello ]

Solution

  1. Step 1: Check quoting rules

    Variables should be quoted to avoid errors if empty or contain spaces, so "$var" is correct.
  2. Step 2: Check operator correctness

    Single equals = is POSIX compliant for string comparison inside [ ]. Double equals == works in [[ ]] but not always in [ ].
  3. Final Answer:

    [ "$var" = "hello" ] -> Option C
  4. Quick Check:

    Quote variables and use = inside [ ] [OK]
Hint: Always quote variables and use = inside [ ] [OK]
Common Mistakes:
  • Not quoting variables causing syntax errors
  • Using == inside [ ] which may fail
  • Missing spaces around brackets
3. What will be the output of this script snippet?
var=""
if [ -z "$var" ]; then
  echo "Empty"
else
  echo "Not Empty"
fi
medium
A. Empty
B. Not Empty
C. Syntax Error
D. No output

Solution

  1. Step 1: Understand the -z test

    -z returns true if the string length is zero (empty string).
  2. Step 2: Check variable value

    Variable var is set to empty string "", so [ -z "$var" ] is true and the if branch runs.
  3. Final Answer:

    Empty -> Option A
  4. Quick Check:

    -z tests empty string [OK]
Hint: Use -z to check empty strings [OK]
Common Mistakes:
  • Not quoting variable causing errors
  • Confusing -z with -n
  • Expecting else branch to run
4. Identify the error in this bash condition:
if [ $num -gt 10 ]; then
  echo "Greater"
fi
medium
A. Missing spaces inside [ ]
B. Variable $num should be quoted
C. Wrong operator for numeric comparison
D. Missing then keyword

Solution

  1. Step 1: Check variable usage in test

    When using variables in [ ], they should be quoted to avoid errors if empty or unset.
  2. Step 2: Analyze the given code

    The code uses $num unquoted. If num is empty, the test becomes invalid syntax.
  3. Final Answer:

    Variable $num should be quoted -> Option B
  4. Quick Check:

    Always quote variables in [ ] to avoid syntax errors [OK]
Hint: Quote variables inside [ ] to prevent errors [OK]
Common Mistakes:
  • Not quoting variables causing syntax errors
  • Confusing numeric and string operators
  • Forgetting spaces around brackets
5. You want to check if a file data.txt exists and is not empty before processing it in a script. Which condition correctly does this?
hard
A. [ -f data.txt ] && [ -s data.txt ]
B. [ -f data.txt -o -s data.txt ]
C. [ -f data.txt && -s data.txt ]
D. [ -f data.txt ] || [ -s data.txt ]

Solution

  1. Step 1: Understand the tests

    -f checks if file exists and is regular file; -s checks if file size is greater than zero (not empty).
  2. Step 2: Choose correct logical operator

    To require both conditions, use logical AND. Inside a single [ ], use -a; or chain separate tests with &&. Using && directly inside [ ] causes syntax error.
  3. Step 3: Analyze options

    The option with && inside single [ ] has syntax error. Chained tests with && are clear and reliable. Options using -o or || apply OR logic, incorrect.
  4. Final Answer:

    [ -f data.txt ] && [ -s data.txt ] -> Option A
  5. Quick Check:

    Use && to combine separate [ ] tests [OK]
Hint: Use separate [ ] with && for AND conditions [OK]
Common Mistakes:
  • Using -o or || which means OR, not AND
  • Using && inside a single [ ] (syntax error)
  • Not checking file size with -s
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