📖 Scenario: You are writing a simple Bash script to check if a file exists and if a number is positive. This is common when automating tasks like backups or validations.
🎯 Goal: Build a Bash script that uses the test command and [ ] syntax to check conditions and print messages accordingly.
📋 What You'll Learn
Create a variable with a filename
Create a variable with a number
Use test command to check if the file exists
Use [ ] syntax to check if the number is greater than zero
Print messages based on the checks
💡 Why This Matters
🌍 Real World
Scripts often need to check if files exist before processing them, or validate numbers before calculations.
💼 Career
Knowing how to use <code>test</code> and <code>[ ]</code> is essential for writing reliable Bash scripts in system administration and automation roles.
Progress0 / 4 steps
1
Set up variables for file and number
Create a variable called filename and set it to example.txt. Create another variable called num and set it to 5.
Bash Scripting
Hint
Use = without spaces to assign values in Bash.
2
Check if the file exists using test command
Use the test command to check if the file stored in filename exists. Store the result in an if statement.
Bash Scripting
Hint
The -e option checks if a file exists.
3
Check if the number is positive using [ ] syntax
Use the [ ] syntax inside an if statement to check if the variable num is greater than zero.
Bash Scripting
Hint
Use -gt inside [ ] to compare numbers.
4
Print messages based on both checks
Add an else clause to each if statement to print "File does not exist." if the file is missing, and "Number is not positive." if the number is zero or negative. Then run the script to see the output.
Bash Scripting
Hint
Use else to handle the opposite condition in if statements.
Practice
(1/5)
1. What does the [ -f filename ] test check in a bash script?
easy
A. If filename is a directory
B. If filename is empty
C. If filename is executable
D. If filename exists and is a regular file
Solution
Step 1: Understand the -f test
The -f option in [ ] checks if the file exists and is a regular file (not a directory or special file).
Step 2: Compare with other options
-d checks for directory, -x for executable, and -s for non-empty file, so they don't match.
Final Answer:
If filename exists and is a regular file -> Option D
Quick Check:
-f means regular file check [OK]
Hint: Remember: -f means regular file exists [OK]
Common Mistakes:
Confusing -f with -d for directories
Forgetting spaces inside [ ]
Using filename without quotes causing errors
2. Which of the following is the correct syntax to test if variable var is equal to string hello in bash?
easy
A. [ $var = hello ]
B. [ $var == hello ]
C. [ "$var" = "hello" ]
D. [ "$var" == hello ]
Solution
Step 1: Check quoting rules
Variables should be quoted to avoid errors if empty or contain spaces, so "$var" is correct.
Step 2: Check operator correctness
Single equals = is POSIX compliant for string comparison inside [ ]. Double equals == works in [[ ]] but not always in [ ].
Final Answer:
[ "$var" = "hello" ] -> Option C
Quick Check:
Quote variables and use = inside [ ] [OK]
Hint: Always quote variables and use = inside [ ] [OK]
Common Mistakes:
Not quoting variables causing syntax errors
Using == inside [ ] which may fail
Missing spaces around brackets
3. What will be the output of this script snippet?
var=""
if [ -z "$var" ]; then
echo "Empty"
else
echo "Not Empty"
fi
medium
A. Empty
B. Not Empty
C. Syntax Error
D. No output
Solution
Step 1: Understand the -z test
-z returns true if the string length is zero (empty string).
Step 2: Check variable value
Variable var is set to empty string "", so [ -z "$var" ] is true and the if branch runs.
Final Answer:
Empty -> Option A
Quick Check:
-z tests empty string [OK]
Hint: Use -z to check empty strings [OK]
Common Mistakes:
Not quoting variable causing errors
Confusing -z with -n
Expecting else branch to run
4. Identify the error in this bash condition:
if [ $num -gt 10 ]; then
echo "Greater"
fi
medium
A. Missing spaces inside [ ]
B. Variable $num should be quoted
C. Wrong operator for numeric comparison
D. Missing then keyword
Solution
Step 1: Check variable usage in test
When using variables in [ ], they should be quoted to avoid errors if empty or unset.
Step 2: Analyze the given code
The code uses $num unquoted. If num is empty, the test becomes invalid syntax.
Final Answer:
Variable $num should be quoted -> Option B
Quick Check:
Always quote variables in [ ] to avoid syntax errors [OK]
Hint: Quote variables inside [ ] to prevent errors [OK]
Common Mistakes:
Not quoting variables causing syntax errors
Confusing numeric and string operators
Forgetting spaces around brackets
5. You want to check if a file data.txt exists and is not empty before processing it in a script. Which condition correctly does this?
hard
A. [ -f data.txt ] && [ -s data.txt ]
B. [ -f data.txt -o -s data.txt ]
C. [ -f data.txt && -s data.txt ]
D. [ -f data.txt ] || [ -s data.txt ]
Solution
Step 1: Understand the tests
-f checks if file exists and is regular file; -s checks if file size is greater than zero (not empty).
Step 2: Choose correct logical operator
To require both conditions, use logical AND. Inside a single [ ], use -a; or chain separate tests with &&. Using && directly inside [ ] causes syntax error.
Step 3: Analyze options
The option with && inside single [ ] has syntax error. Chained tests with && are clear and reliable. Options using -o or || apply OR logic, incorrect.
Final Answer:
[ -f data.txt ] && [ -s data.txt ] -> Option A
Quick Check:
Use && to combine separate [ ] tests [OK]
Hint: Use separate [ ] with && for AND conditions [OK]
Common Mistakes:
Using -o or || which means OR, not AND
Using && inside a single [ ] (syntax error)
Not checking file size with -s
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.