Bird
Raised Fist0
Bash Scriptingscripting~20 mins

Logical operators (-a, -o, !) in Bash Scripting - Mini Project: Build & Apply

Choose your learning style10 modes available
Using Logical Operators in Bash Scripts
📖 Scenario: You are writing a simple bash script to check conditions on numbers, similar to checking if a number is in a certain range or if a file exists. This helps automate decisions in scripts.
🎯 Goal: Build a bash script that uses logical operators -a (and), -o (or), and ! (not) to test multiple conditions together.
📋 What You'll Learn
Create a variable num with the value 15
Create a variable file with the value example.txt
Use if statements with logical operators -a, -o, and !
Print messages based on combined conditions
💡 Why This Matters
🌍 Real World
Logical operators help automate decisions in scripts, like checking if files exist or if values meet certain criteria before running commands.
💼 Career
Understanding bash logical operators is essential for system administrators, DevOps engineers, and anyone automating tasks on Linux or Unix systems.
Progress0 / 4 steps
1
Set up variables
Create a variable called num and set it to 15. Create another variable called file and set it to example.txt.
Bash Scripting
Hint

Use = to assign values without spaces, and quotes for the filename.

2
Add a threshold variable
Create a variable called threshold and set it to 10.
Bash Scripting
Hint

Assign 10 to threshold without spaces.

3
Use logical operators in if statements
Write an if statement that checks if num is greater than threshold -a the file named by file does not exist (use ! and -e). Inside the if, print "Number is big and file missing".
Bash Scripting
Hint

Use [ condition ] with spaces, and combine conditions with -a. Use ! -e "$file" to check file absence.

4
Add an else if with -o operator and print output
Add an elif that checks if num is less than or equal to threshold -o the file named by file exists (use -e). Inside this elif, print "Number is small or file exists". Add an else that prints "No conditions met". Finally, run the script so it prints the output.
Bash Scripting
Hint

Use elif [ condition ] with -o for OR. Use else for fallback. Run script to see output.

Practice

(1/5)
1. Which logical operator in bash scripting means AND when used inside [ ]?
easy
A. &&
B. -o
C. !
D. -a

Solution

  1. Step 1: Understand bash logical operators inside [ ]

    Inside single brackets, -a means AND, -o means OR, and ! means NOT.
  2. Step 2: Identify the AND operator

    The operator -a is used to combine two conditions with AND logic.
  3. Final Answer:

    -a -> Option D
  4. Quick Check:

    AND operator = -a [OK]
Hint: Remember: -a is AND, -o is OR, ! is NOT inside [ ] [OK]
Common Mistakes:
  • Confusing -a with -o
  • Using && inside [ ] which is invalid
  • Thinking ! means AND
2. Which of the following is the correct syntax to check if file file.txt exists AND is readable in bash?
easy
A. [ -e file.txt -o -r file.txt ]
B. [ -e file.txt && -r file.txt ]
C. [ -e file.txt -a -r file.txt ]
D. [ ! -e file.txt -a -r file.txt ]

Solution

  1. Step 1: Understand the condition to check

    We want to check if file.txt exists AND is readable, so both conditions must be true.
  2. Step 2: Choose correct logical operator and syntax

    Inside [ ], -a means AND, so [ -e file.txt -a -r file.txt ] is correct. Using -o means OR, which is wrong here. Using && inside [ ] is invalid syntax.
  3. Final Answer:

    [ -e file.txt -a -r file.txt ] -> Option C
  4. Quick Check:

    AND check uses -a inside [ ] [OK]
Hint: Use -a for AND inside [ ], not && or -o for AND [OK]
Common Mistakes:
  • Using -o instead of -a for AND
  • Using && inside [ ] which causes syntax error
  • Negating conditions incorrectly with !
3. What will be the output of this script snippet?
if [ -f myfile.txt -o ! -r myfile.txt ]; then echo "Check passed"; else echo "Check failed"; fi

Assuming myfile.txt exists but is NOT readable.
medium
A. Check passed
B. Check failed
C. Syntax error
D. No output

Solution

  1. Step 1: Analyze conditions with given file state

    -f myfile.txt is true because file exists. ! -r myfile.txt is true because file is not readable.
  2. Step 2: Evaluate OR (-o) logic

    Since OR means either condition true passes, and both are true here, the whole condition is true.
  3. Final Answer:

    Check passed -> Option A
  4. Quick Check:

    True OR True = True [OK]
Hint: OR (-o) passes if any condition is true [OK]
Common Mistakes:
  • Thinking ! -r means readable
  • Confusing -o with -a
  • Expecting syntax error due to !
4. Identify the error in this bash condition:
if [ !-f myfile.txt -a -r myfile.txt ]; then echo "Valid"; fi
medium
A. Missing spaces around ! operator
B. Incorrect use of -a inside [ ]
C. No error, condition is correct
D. Missing closing bracket ]

Solution

  1. Step 1: Check spacing around ! operator

    In bash, ! must have a space after it inside [ ]. The code [ ! -f myfile.txt -a -r myfile.txt ] is correct only if spaces are present. If missing, it causes error.
  2. Step 2: Confirm other syntax parts

    The use of -a inside [ ] is valid. The closing bracket is present. So no error there.
  3. Final Answer:

    Missing spaces around ! operator -> Option A
  4. Quick Check:

    ! needs spaces inside [ ] [OK]
Hint: Always put spaces around ! inside [ ] [OK]
Common Mistakes:
  • Using && or || inside [ ]
  • Forgetting spaces around operators
  • Assuming -a is invalid inside [ ]
5. You want to write a bash condition that checks if a variable var is NOT empty AND file1.txt exists OR file2.txt is readable. Which condition is correct?
hard
A. [ -n "$var" -a ( -e file1.txt -o -r file2.txt ) ]
B. [ -n "$var" -a -e file1.txt -o -r file2.txt ]
C. [ -z "$var" -a -e file1.txt -o -r file2.txt ]
D. [ -n "$var" -o -e file1.txt -a -r file2.txt ]

Solution

  1. Step 1: Understand the logic to implement

    We want: var NOT empty AND file1 exists OR file2 readable, i.e., (NOT empty AND file1 exists) OR file2 readable.
  2. Step 2: Check each option's logic and syntax

    A: Parentheses for grouping invalid inside [ ], syntax error.
    B: [ -n "$var" -o -e file1.txt -a -r file2.txt ] wrong logic: mixes OR then AND.
    C: [ -z "$var" -a -e file1.txt -o -r file2.txt ] uses -z (empty), wrong for NOT empty.
    D: [ -n "$var" -a -e file1.txt -o -r file2.txt ] correct: left-to-right ((non-empty -a exists) -o readable).
  3. Final Answer:

    [ -n "$var" -a -e file1.txt -o -r file2.txt ] -> Option B
  4. Quick Check:

    -a/-o left-to-right no grouping needed [OK]
Hint: -a/-o associate left-to-right inside [ ] [OK]
Common Mistakes:
  • Trying to group with ( ) invalid in [ ]
  • Mixing -o and -a without understanding associativity
  • Using -z for non-empty check
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