Bird
Raised Fist0
Bash Scriptingscripting~10 mins

String comparisons (=, !=, -z, -n) in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - String comparisons (=, !=, -z, -n)
Start
↓
Get two strings
↓
Check if strings are equal (=)
Yes→Print 'Equal'
No↓
Check if strings are not equal (!=)
Yes→Print 'Not Equal'
No↓
Check if string is empty (-z)
Yes→Print 'Empty String'
No↓
Check if string is not empty (-n)
Yes→Print 'Not Empty'
No↓
End
The flow checks string equality, inequality, emptiness, and non-emptiness step-by-step, printing results accordingly.
Execution Sample
Bash Scripting
str1="hello"
str2="world"
if [ "$str1" = "$str2" ]; then
  echo "Equal"
elif [ "$str1" != "$str2" ]; then
  echo "Not Equal"
fi
This script compares two strings and prints if they are equal or not.
Execution Table
StepCondition CheckedEvaluationBranch TakenOutput
1[ "$str1" = "$str2" ]"hello" = "world" → FalseNo
2[ "$str1" != "$str2" ]"hello" != "world" → TrueYesNot Equal
3End of conditions---
💡 Condition for inequality is true, so 'Not Equal' is printed and script ends.
Variable Tracker
VariableStartAfter Step 1After Step 2Final
str1"hello""hello""hello""hello"
str2"world""world""world""world"
Key Moments - 3 Insights
Why does the script print 'Not Equal' even though we only checked equality first?
Because the first condition [ "$str1" = "$str2" ] is false (see step 1 in execution_table), the script moves to the elif which checks inequality and finds it true (step 2), so it prints 'Not Equal'.
What does the -z test do and when would it be true?
The -z test checks if a string is empty. It returns true if the string length is zero. For example, if str1="", then [ -z "$str1" ] is true.
Why do we put variables in double quotes inside [ ]?
Double quotes prevent errors if the variable is empty or contains spaces. Without quotes, the test might fail or behave unexpectedly.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the result of the first condition check at step 1?
AFalse
BTrue
CError
DNot evaluated
💡 Hint
Check the 'Evaluation' column in row 1 of execution_table.
At which step does the script print 'Not Equal'?
AStep 1
BStep 3
CStep 2
DNever
💡 Hint
Look at the 'Output' column in execution_table rows.
If str1 was empty (""), which test would return true?
A[ "$str1" = "$str2" ]
B[ -z "$str1" ]
C[ "$str1" != "$str2" ]
D[ -n "$str1" ]
💡 Hint
Refer to key_moments explanation about -z test.
Concept Snapshot
String comparisons in bash:
- Use [ "$a" = "$b" ] for equality
- Use [ "$a" != "$b" ] for inequality
- Use [ -z "$a" ] to check if string is empty
- Use [ -n "$a" ] to check if string is not empty
Always quote variables to avoid errors.
Full Transcript
This visual execution trace shows how bash scripts compare strings using =, !=, -z, and -n. The script starts by assigning two strings, then checks if they are equal. If not equal, it checks inequality and prints 'Not Equal'. The -z test checks if a string is empty, and -n checks if it is not empty. Variables are quoted to prevent errors. The execution table details each step's condition, evaluation, branch, and output. Key moments clarify common confusions like why the script prints 'Not Equal' and the purpose of quoting variables. The quiz tests understanding of condition results and string emptiness checks.

Practice

(1/5)
1. Which operator in bash scripting checks if two strings are equal?
easy
A. Using = inside double brackets [[ ]]
B. Using -z to check string length
C. Using != inside double brackets [[ ]]
D. Using -n to check if string is not empty

Solution

  1. Step 1: Understand string equality operator

    In bash, = inside [[ ]] compares if two strings are equal.
  2. Step 2: Differentiate from other operators

    -z checks if string is empty, != checks inequality, -n checks non-empty string.
  3. Final Answer:

    Using = inside double brackets [[ ]] -> Option A
  4. Quick Check:

    String equality = = [OK]
Hint: Use = inside [[ ]] to check if strings are equal [OK]
Common Mistakes:
  • Confusing = with -z or -n
  • Using = outside [[ ]] without quotes
  • Mixing != with = for equality
2. Which of the following is the correct syntax to check if a variable var is not empty in bash?
easy
A. [ -z "$var" ]
B. [ "$var" = "" ]
C. [ -n "$var" ]
D. [ $var != "" ]

Solution

  1. Step 1: Understand -n operator

    -n returns true if the string length is greater than zero (not empty).
  2. Step 2: Check syntax correctness

    Using quotes around $var prevents errors if variable is empty or contains spaces.
  3. Final Answer:

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

    Not empty check = -n [OK]
Hint: Use [ -n "$var" ] to test if var is not empty [OK]
Common Mistakes:
  • Using -z instead of -n for not empty
  • Forgetting quotes around variable
  • Using = "" to check emptiness incorrectly
3. What will be the output of this bash script snippet?
var="hello"
if [[ "$var" != "world" ]]; then
  echo "Not world"
else
  echo "World"
fi
medium
A. Not world
B. World
C. Syntax error
D. No output

Solution

  1. Step 1: Evaluate string comparison

    Variable var is "hello", which is not equal to "world".
  2. Step 2: Determine which branch runs

    The condition [[ "$var" != "world" ]] is true, so it echoes "Not world".
  3. Final Answer:

    Not world -> Option A
  4. Quick Check:

    hello != world -> Not world [OK]
Hint: If strings differ, != condition is true [OK]
Common Mistakes:
  • Confusing = and != operators
  • Missing quotes causing syntax errors
  • Assuming else branch runs when condition is true
4. Identify the error in this bash snippet that checks if input is empty:
if [ -z $input ]; then
  echo "Empty"
else
  echo "Not empty"
fi
medium
A. Using -z instead of -n
B. Missing quotes around $input in test
C. Using single brackets instead of double brackets
D. No error, script is correct

Solution

  1. Step 1: Check variable quoting in test

    Variable $input is not quoted, which can cause errors if empty or contains spaces.
  2. Step 2: Understand correct syntax

    Quotes around $input like "$input" are needed to safely test emptiness.
  3. Final Answer:

    Missing quotes around $input in test -> Option B
  4. Quick Check:

    Always quote variables in tests [OK]
Hint: Always quote variables in [ ] tests to avoid errors [OK]
Common Mistakes:
  • Forgetting quotes around variables
  • Thinking -z and -n are interchangeable
  • Believing single brackets can't test strings
5. You want to write a bash script that prints "Empty string" if variable text is empty, and "Has content" otherwise. Which snippet correctly does this?
hard
A. if [ "$text" != "" ]; then echo "Empty string"; else echo "Has content"; fi
B. if [[ "$text" = "" ]]; then echo "Has content"; else echo "Empty string"; fi
C. if [ -n "$text" ]; then echo "Empty string"; else echo "Has content"; fi
D. if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi

Solution

  1. Step 1: Understand -z usage

    -z "$text" returns true if text is empty.
  2. Step 2: Check echo outputs match condition

    If empty, print "Empty string"; else print "Has content". if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi matches this logic correctly.
  3. Final Answer:

    if [[ -z "$text" ]]; then echo "Empty string"; else echo "Has content"; fi -> Option D
  4. Quick Check:

    -z empty -> print "Empty string" [OK]
Hint: Use if [[ -z "$var" ]] for empty string check [OK]
Common Mistakes:
  • Swapping outputs for empty and non-empty cases
  • Using = "" without quotes or wrong logic
  • Confusing -n and -z meanings
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