Bird
Raised Fist0
Bash Scriptingscripting~5 mins

test command and [ ] syntax in Bash Scripting

Choose your learning style10 modes available
Introduction
The test command and [ ] syntax help check conditions in scripts to decide what to do next.
Check if a file exists before reading it.
Compare two numbers to see which is bigger.
See if a variable is empty or not.
Decide what to do based on user input.
Verify if a directory is present before creating files.
Syntax
Bash Scripting
test CONDITION
[ CONDITION ]
Both test and [ ] do the same thing: check a condition.
Make sure to put spaces around [ and ] when using [ ].
Examples
Check if a file named filename.txt exists.
Bash Scripting
test -f filename.txt
if [ -f filename.txt ]; then echo "File exists"; fi
Check if variable var equals 'hello'.
Bash Scripting
if [ "$var" = "hello" ]; then echo "Greeting found"; fi
Check if number num is greater than 10.
Bash Scripting
if test $num -gt 10; then echo "Number $num is greater than 10"; fi
Sample Program
This script checks if a file named myfile.txt exists and prints a message. Then it checks if the number 5 is less than 10 and prints the result.
Bash Scripting
#!/bin/bash

filename="myfile.txt"

if [ -e "$filename" ]; then
  echo "File '$filename' exists."
else
  echo "File '$filename' does not exist."
fi

num=5
if test $num -lt 10; then
  echo "Number $num is less than 10."
else
  echo "Number $num is 10 or more."
fi
OutputSuccess
Important Notes
Always put spaces after [ and before ] when using [ ] syntax.
Use quotes around variables to avoid errors if they are empty or have spaces.
test and [ ] are interchangeable, but [ ] is more common in scripts.
Summary
test and [ ] check conditions in bash scripts.
Use them to make decisions like if-else.
Remember spaces and quotes to avoid mistakes.

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