Bird
Raised Fist0
Bash Scriptingscripting

Logical operators (-a, -o, !) in Bash Scripting - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the '-a' operator do in bash scripting?
The '-a' operator means AND. It checks if both conditions on its sides are true.
Click to reveal answer
beginner
What is the purpose of the '-o' operator in bash?
The '-o' operator means OR. It checks if at least one of the conditions is true.
Click to reveal answer
beginner
What does the '!' operator do in bash conditional expressions?
The '!' operator means NOT. It reverses the result of the condition that follows it.
Click to reveal answer
intermediate
How would you write a condition to check if a file exists AND is readable using '-a'?
You write: [ -e filename -a -r filename ] which means the file exists AND is readable.
Click to reveal answer
intermediate
Why should you be careful when mixing '-a' and '-o' in the same test expression?
Because '-a' and '-o' have different precedence and can cause unexpected results. It's safer to use separate tests or parentheses.
Click to reveal answer
In bash, what does '[ -f file -a -w file ]' check?
AFile exists and is writable
BFile exists or is writable
CFile does not exist and is writable
DFile is not writable
What does the '!' operator do in '[ ! -e folder ]'?
AChecks if folder is readable
BChecks if folder exists
CChecks if folder does NOT exist
DChecks if folder is writable
Which operator means OR in bash test expressions?
A-o
B!
C-a
D&&
Why might mixing '-a' and '-o' in one test be risky?
AThey always return false
BThey only work in scripts, not command line
CThey are deprecated
DThey have different precedence which can cause logic errors
How do you write a condition to check if a file is NOT empty using '!'?
A[ -s ! file ]
B[ ! -s file ]
C[ ! -e file ]
D[ -s file ]
Explain how to use '-a', '-o', and '!' in bash conditional tests with simple examples.
Think about checking file properties with AND, OR, and negation.
You got /5 concepts.
    Describe a real-life scenario where you might use logical operators '-a', '-o', and '!' in a bash script.
    Imagine checking if a file is ready to be processed.
    You got /5 concepts.

      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