Bird
Raised Fist0
Bash Scriptingscripting~5 mins

[[ ]] extended test in Bash Scripting

Choose your learning style10 modes available
Introduction

The [[ ]] extended test lets you check conditions in bash scripts easily. It helps decide what to do next based on facts.

Check if a file exists before reading it.
Compare two numbers to choose a path.
Test if a string is empty or not.
Verify if a directory is writable.
Decide actions based on user input.
Syntax
Bash Scripting
[[ condition ]]

# Example:
if [[ $var -eq 5 ]]; then
  echo "Equal to 5"
fi

Use [[ ]] inside if statements or loops to test conditions.

Supports many operators like -eq, -ne, <, >, string tests, and file tests.

Examples
Tests if variable num is greater than 10.
Bash Scripting
[[ $num -gt 10 ]]
Checks if the file /etc/passwd exists and is a regular file.
Bash Scripting
[[ -f /etc/passwd ]]
Tests if the string variable str equals "hello".
Bash Scripting
[[ $str == "hello" ]]
Checks if /tmp is a directory.
Bash Scripting
[[ -d /tmp ]]
Sample Program

This script asks for a number and tells if it is positive, zero, or negative using [[ ]] tests.

Bash Scripting
#!/bin/bash

read -p "Enter a number: " num

if [[ $num -gt 0 ]]; then
  echo "Positive number"
elif [[ $num -eq 0 ]]; then
  echo "Zero"
else
  echo "Negative number"
fi
OutputSuccess
Important Notes

[[ ]] is safer and more powerful than [ ] in bash.

Inside [[ ]], you don't need to quote variables to prevent word splitting.

Use && and || inside [[ ]] for combining conditions.

Summary

[[ ]] tests conditions in bash scripts simply and clearly.

It supports numbers, strings, and file checks.

Use it to control script flow based on facts.

Practice

(1/5)
1. What does the [[ ]] construct do in a bash script?
easy
A. It tests conditions like comparing strings or numbers.
B. It defines a function in bash.
C. It creates a new variable.
D. It runs a command in the background.

Solution

  1. Step 1: Understand the purpose of [[ ]]

    The [[ ]] syntax is used in bash to test conditions such as string comparison, number comparison, and file checks.
  2. Step 2: Compare with other options

    Options B, C, and D describe other bash features unrelated to [[ ]].
  3. Final Answer:

    It tests conditions like comparing strings or numbers. -> Option A
  4. Quick Check:

    [[ ]] = condition test [OK]
Hint: Remember: [[ ]] is for testing conditions in bash [OK]
Common Mistakes:
  • Confusing [[ ]] with function definition syntax
  • Thinking [[ ]] creates variables
  • Assuming [[ ]] runs commands
2. Which of the following is the correct syntax to check if variable var equals "hello" using [[ ]]?
easy
A. [[ $var != "hello" ]]
B. [[ $var == "hello" ]]
C. [[ $var === "hello" ]]
D. [[ $var -eq "hello" ]]

Solution

  1. Step 1: Identify correct string comparison operator in [[ ]]

    In bash, inside [[ ]], the operator for string equality is ==. -eq is for numeric equality. === is invalid.
  2. Step 2: Check each option

    [[ $var != "hello" ]] checks inequality. [[ $var -eq "hello" ]] uses numeric -eq on string (error). [[ $var === "hello" ]] uses invalid ===. [[ $var == "hello" ]] uses == correctly.
  3. Final Answer:

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

    String equality in [[ ]] uses == [OK]
Hint: Use == for string equality inside [[ ]] [OK]
Common Mistakes:
  • Using === which is invalid in bash
  • Using -eq for string comparison
  • Using != when checking for equality
3. What will be the output of this script snippet?
var=5
if [[ $var -gt 3 && $var -lt 10 ]]; then
echo "In range"
else
echo "Out of range"
fi
medium
A. In range
B. Out of range
C. Syntax error
D. No output

Solution

  1. Step 1: Evaluate numeric conditions inside [[ ]]

    The variable var is 5. The condition checks if 5 is greater than 3 and less than 10, which is true.
  2. Step 2: Determine which branch runs

    Since the condition is true, the script echoes "In range".
  3. Final Answer:

    In range -> Option A
  4. Quick Check:

    5 > 3 and 5 < 10 = true [OK]
Hint: Check each numeric condition carefully with && [OK]
Common Mistakes:
  • Confusing -gt and -lt operators
  • Using single & instead of &&
  • Forgetting to quote variables (not critical here)
4. Identify the error in this bash snippet:
filename="test.txt"
if [[ -f $filename && -r $filename ]]
then
echo "File exists and readable"
fi
medium
A. Variable $filename not quoted
B. Wrong operator for file check
C. Missing closing bracket "]" for [[ ]]
D. Missing then keyword

Solution

  1. Step 1: Check syntax of [[ ]] condition

    The condition starts with [[ and has matching closing ]]. So brackets are correct.
  2. Step 2: Verify other parts

    The then keyword is missing after the condition line, which causes a syntax error.
  3. Final Answer:

    Missing then keyword -> Option D
  4. Quick Check:

    Every if condition must be followed by then [OK]
Hint: Always include then after if condition [OK]
Common Mistakes:
  • Forgetting the then keyword
  • Using single [ with && without escaping
  • Ignoring variable quoting warnings
5. You want to check if a variable input is either "yes" or "y" (case insensitive) using [[ ]]. Which snippet correctly does this?
hard
A. [[ $input =~ ^(yes|y)$ ]]
B. [[ $input == "yes" || $input == "y" ]]
C. [[ ${input,,} == "yes" || ${input,,} == "y" ]]
D. [[ $input == "yes" && $input == "y" ]]

Solution

  1. Step 1: Understand case-insensitive check

    To ignore case, convert input to lowercase using ${input,,} before comparison.
  2. Step 2: Check logical OR condition

    We want to accept either "yes" or "y", so use || between comparisons.
  3. Step 3: Evaluate options

    [[ ${input,,} == "yes" || ${input,,} == "y" ]] correctly converts to lowercase and uses OR. [[ $input == "yes" || $input == "y" ]] lacks case conversion. [[ $input =~ ^(yes|y)$ ]] uses regex but is case-sensitive. [[ $input == "yes" && $input == "y" ]] uses AND which requires both to be true, impossible here.
  4. Final Answer:

    [[ ${input,,} == "yes" || ${input,,} == "y" ]] -> Option C
  5. Quick Check:

    Use ${var,,} for lowercase and || for OR [OK]
Hint: Use ${var,,} to lowercase and || for OR in [[ ]] [OK]
Common Mistakes:
  • Not converting input to lowercase
  • Using && instead of || for alternatives
  • Incorrect regex syntax inside [[ ]]
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