Introduction
The Linux test command is a powerful utility that enables developers and system administrators to perform comprehensive conditional checks and validations within shell scripts. This tutorial explores the fundamental techniques and practical applications of the test command, providing insights into how to leverage its capabilities for robust Linux scripting and system management.
Test Command Basics
Introduction to Test Command
The test command is a fundamental utility in Linux shell scripting used for performing conditional checks and evaluations. It allows developers to compare values, check file attributes, and make decisions in shell scripts.
Basic Syntax
The test command can be used in two primary forms:
- Explicit form:
test expression - Shorthand form:
[ expression ]
## Explicit form
test 5 -gt 3
## Shorthand form
[ 5 -gt 3 ]
Common Test Operators
Numeric Comparisons
| Operator | Description | Example |
|---|---|---|
-eq |
Equal to | [ 5 -eq 5 ] |
-ne |
Not equal to | [ 5 -ne 3 ] |
-gt |
Greater than | [ 5 -gt 3 ] |
-lt |
Less than | [ 3 -lt 5 ] |
-ge |
Greater than or equal | [ 5 -ge 5 ] |
-le |
Less than or equal | [ 3 -le 5 ] |
String Comparisons
| Operator | Description | Example |
|---|---|---|
= |
Equal to | [ "$a" = "$b" ] |
!= |
Not equal to | [ "$a" != "$b" ] |
-z |
String is empty | [ -z "$var" ] |
-n |
String is not empty | [ -n "$var" ] |
File Test Operators
graph TD
A[File Test Operators] --> B[Existence]
A --> C[Permissions]
A --> D[Types]
B --> B1[-e: File exists]
B --> B2[-f: Regular file]
C --> C1[-r: Readable]
C --> C2[-w: Writable]
C --> C3[-x: Executable]
D --> D1[-d: Directory]
D --> D2[-L: Symbolic link]
Practical Example
#!/bin/bash
## Check if a file exists
if [ -f "/etc/passwd" ]; then
echo "File exists"
else
echo "File does not exist"
fi
## Compare numbers
num1=10
num2=20
if [ $num1 -lt $num2 ]; then
echo "$num1 is less than $num2"
fi
## Check string
name=""
if [ -z "$name" ]; then
echo "Name is empty"
fi
Best Practices
- Always quote variables to prevent word splitting
- Use
[[and]]for advanced testing in Bash - Test for file existence before performing operations
LabEx Tip
When learning Linux scripting, practice is key. LabEx provides interactive environments to experiment with test commands and shell scripting techniques.
Conditional Expressions
Understanding Conditional Logic
Conditional expressions form the core of decision-making in shell scripting, allowing scripts to perform different actions based on specific conditions.
Logical Operators
Logical AND and OR
graph TD
A[Logical Operators] --> B[AND: -a or &&]
A --> C[OR: -o or ||]
A --> D[NOT: !]
Operator Comparison
| Operator | Meaning | Example |
|---|---|---|
-a |
Logical AND | [ condition1 -a condition2 ] |
-o |
Logical OR | [ condition1 -o condition2 ] |
! |
Logical NOT | [ ! condition ] |
Complex Conditional Expressions
Nested Conditions
#!/bin/bash
## Complex condition example
if [ $age -ge 18 ] && [ $age -le 65 ]; then
echo "You are in the working age group"
fi
## Alternative syntax
if [[ $age -ge 18 && $age -le 65 ]]; then
echo "You are in the working age group"
fi
Advanced Conditional Techniques
Multiple Condition Checking
#!/bin/bash
## Multiple condition check
check_system() {
if [[ -f /etc/os-release ]] \
&& [[ $(cat /etc/os-release | grep -i ubuntu) ]] \
&& [[ $(whoami) == "root" ]]; then
echo "Ubuntu system with root access"
else
echo "System requirements not met"
fi
}
check_system
Conditional Expression Patterns
graph TD
A[Conditional Patterns] --> B[Numeric Comparisons]
A --> C[String Comparisons]
A --> D[File Conditions]
B --> B1[Equal, Not Equal]
B --> B2[Greater, Less]
C --> C1[Matching]
C --> C2[Length]
D --> D1[Existence]
D --> D2[Permissions]
Common Pitfalls
- Always quote variables to prevent word splitting
- Use
[[for more robust condition checking in Bash - Be aware of whitespace in conditions
Practical Use Cases
#!/bin/bash
## User input validation
read -p "Enter your age: " age
if [[ $age =~ ^[0-9]+$ ]]; then
if [ $age -lt 18 ]; then
echo "You are a minor"
elif [ $age -ge 18 ] && [ $age -le 65 ]; then
echo "You are an adult"
else
echo "You are a senior citizen"
fi
else
echo "Invalid age input"
fi
LabEx Insight
LabEx recommends practicing conditional expressions through interactive shell scripting environments to build practical skills.
Practical Linux Scripting
Real-World Test Command Applications
System Health Monitoring Script
#!/bin/bash
## System Health Check Script
check_system_health() {
## Check disk space
if [ $(df -h / | awk '/\// {print $(NF-1)}' | sed 's/%//') -gt 90 ]; then
echo "WARNING: Disk space is critically low!"
fi
## Check memory usage
if [ $(free | grep Mem | awk '{print $3/$2 * 100.0}') -gt 80 ]; then
echo "WARNING: High memory consumption detected!"
fi
## Check for zombie processes
if [ $(ps aux | grep defunct | wc -l) -gt 0 ]; then
echo "WARNING: Zombie processes found!"
fi
}
Automated Backup Script
#!/bin/bash
## Backup Script with Conditional Checks
## Check if source directory exists
## Check if backup directory is writable
## Perform backup
User Management Script
#!/bin/bash
## Advanced User Management
## Validate input
## Check if user already exists
## Create user with password
Script Workflow Patterns
graph TD
A[Script Workflow] --> B[Input Validation]
A --> C[Conditional Checks]
A --> D[Error Handling]
B --> B1[Validate Arguments]
B --> B2[Check Input Types]
C --> C1[System Conditions]
C --> C2[Resource Availability]
D --> D1[Exit Codes]
D --> D2[Error Logging]
Best Practices for Test Command Usage
| Practice | Description | Example |
|---|---|---|
| Quote Variables | Prevent word splitting | [ "$var" = "value" ] |
| Use Double Brackets | Enhanced testing in Bash | [[ $var =~ pattern ]] |
| Handle Edge Cases | Check for null/empty values | [ -n "$variable" ] |
Advanced Conditional Techniques
#!/bin/bash
## Complex Condition Handling
process_file() {
local file=$1
## Multiple condition checks
if [[ -f "$file" ]] && [[ -r "$file" ]] && [[ -s "$file" ]]; then
echo "File is valid for processing"
## Process file logic here
else
echo "File does not meet processing requirements"
fi
}
Error Handling and Logging
#!/bin/bash
## Comprehensive Error Handling
log_error() {
local message=$1
echo "[ERROR] $(date): $message" >> /var/log/script_errors.log
exit 1
}
## Example usage
[ -d "/path/to/directory" ] || log_error "Directory does not exist"
LabEx Recommendation
LabEx suggests practicing these scripts in controlled environments to build practical Linux scripting skills and understand test command nuances.
Summary
By mastering the Linux test command, programmers can create more intelligent and responsive shell scripts that efficiently evaluate file attributes, compare values, and implement complex conditional logic. Understanding these techniques empowers developers to write more sophisticated and reliable automation scripts that enhance system performance and administrative workflows.



