Bird
Raised Fist0
Bash Scriptingscripting~5 mins

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

Choose your learning style10 modes available
Introduction

String comparisons help you check if words or texts are equal, different, empty, or not empty in scripts.

Check if a user entered the correct password.
See if a file name matches a specific pattern.
Verify if a variable has any value or is empty.
Decide what to do based on user input text.
Compare two strings to control script flow.
Syntax
Bash Scripting
if [ "$string1" = "$string2" ]; then
  # commands
fi

if [ "$string1" != "$string2" ]; then
  # commands
fi

if [ -z "$string" ]; then
  # commands for empty string
fi

if [ -n "$string" ]; then
  # commands for non-empty string
fi

Always put strings in double quotes to avoid errors with spaces or empty values.

Use single brackets [ ] with spaces around operators for string tests in bash.

Examples
This checks if the variable name is exactly "Alice".
Bash Scripting
if [ "$name" = "Alice" ]; then
  echo "Hello, Alice!"
fi
This checks if input is not empty.
Bash Scripting
if [ "$input" != "" ]; then
  echo "You typed something."
fi
This runs if password has no characters.
Bash Scripting
if [ -z "$password" ]; then
  echo "Password is empty!"
fi
This runs if filename has one or more characters.
Bash Scripting
if [ -n "$filename" ]; then
  echo "Filename is set."
fi
Sample Program

This script asks for your name. It checks if you typed nothing, if you typed "Alice", or something else, and prints a message.

Bash Scripting
#!/bin/bash

read -p "Enter your name: " name

if [ "$name" = "" ]; then
  echo "You did not enter a name."
elif [ "$name" = "Alice" ]; then
  echo "Welcome back, Alice!"
else
  echo "Hello, $name!"
fi
OutputSuccess
Important Notes

Use = for equality and != for inequality in string tests.

-z means the string is empty; -n means it is not empty.

Always quote variables to avoid errors when they are empty or contain spaces.

Summary

Use = and != to compare if strings are equal or not.

Use -z to check if a string is empty, and -n to check if it is not empty.

Always put quotes around variables in comparisons to keep your script safe.

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