Bird
Raised Fist0
Bash Scriptingscripting~10 mins

Backup automation script in Bash Scripting - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Backup automation script
Start Script
↓
Check Source Folder Exists
Yes↓
Create Backup Folder if Missing
↓
Copy Files from Source to Backup
↓
Confirm Backup Success
↓
End Script
The script starts by checking the source folder, creates backup folder if needed, copies files, then confirms success before ending.
Execution Sample
Bash Scripting
#!/bin/bash
SRC="/home/user/docs"
DEST="/home/user/backup"
if [ -d "$SRC" ]; then
    mkdir -p "$DEST"
    cp -r "$SRC"/* "$DEST"
    if [ $? -eq 0 ]; then
        echo "Backup success"
    fi
fi
This script checks if the source folder exists. If it does, it creates the backup folder if missing, copies all files recursively from the source to the backup folder, and confirms success by checking the exit status.
Execution Table
StepActionCondition/EvaluationResult/Output
1Check if source folder exists[ -d /home/user/docs ]True, proceed
2Create backup folder if missingmkdir -p /home/user/backupBackup folder ready
3Copy files from source to backupcp -r /home/user/docs/* /home/user/backupFiles copied
4Check copy success$? -eq 0Success message printed
5End scriptN/AScript ends
💡 Script ends after copying files and confirming success
Variable Tracker
VariableStartAfter Step 2After Step 3Final
SRC/home/user/docs/home/user/docs/home/user/docs/home/user/docs
DEST/home/user/backup/home/user/backup/home/user/backup/home/user/backup
Key Moments - 3 Insights
Why do we use mkdir -p before copying files?
mkdir -p ensures the backup folder exists before copying. Without it, copying would fail if the folder is missing (see Step 2 in execution_table).
What happens if the source folder does not exist?
The script checks if the source folder exists at Step 1. If it doesn't, the script should stop or handle the error to avoid copying from a missing folder.
How do we know if the copy was successful?
After copying, the script checks the exit status $? at Step 4. A zero means success, so it prints a success message.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the result of Step 2?
AFiles copied
BBackup folder ready
CSource folder missing
DScript ends
💡 Hint
Check the 'Result/Output' column for Step 2 in the execution_table
At which step does the script confirm the copy was successful?
AStep 4
BStep 3
CStep 1
DStep 5
💡 Hint
Look for the step checking exit status $? in the execution_table
If the source folder did not exist, what would happen at Step 1?
ACondition is True, proceed
BBackup folder is created
CCondition is False, script should stop
DFiles are copied anyway
💡 Hint
Refer to the Condition/Evaluation column for Step 1 in the execution_table
Concept Snapshot
Backup automation script in bash:
- Define source (SRC) and destination (DEST) folders
- Use mkdir -p to create backup folder if missing
- Copy files with cp -r from SRC to DEST
- Check copy success with exit status ($?)
- Script ends after confirming backup
Full Transcript
This backup automation script starts by checking if the source folder exists. If it does, it creates the backup folder if missing using mkdir -p. Then it copies all files from the source to the backup folder using cp -r. After copying, it checks if the copy was successful by examining the exit status. Finally, the script ends. Variables SRC and DEST hold the folder paths and remain constant. Key points include ensuring the backup folder exists before copying and checking the copy success to avoid silent failures.

Practice

(1/5)
1. What is the main purpose of a backup automation script in bash?
easy
A. To delete old files from the system
B. To automatically copy important files to a safe location regularly
C. To speed up the computer by closing programs
D. To change file permissions for security

Solution

  1. Step 1: Understand the goal of backup automation

    A backup automation script is designed to save copies of important files automatically to prevent data loss.
  2. Step 2: Identify the correct purpose among options

    Only To automatically copy important files to a safe location regularly describes copying files regularly to a safe place, which matches backup automation.
  3. Final Answer:

    To automatically copy important files to a safe location regularly -> Option B
  4. Quick Check:

    Backup automation = automatic file copying [OK]
Hint: Backup scripts copy files automatically to protect data [OK]
Common Mistakes:
  • Confusing backup with deleting files
  • Thinking backup speeds up the system
  • Mixing backup with changing permissions
2. Which of the following bash commands correctly creates a backup directory with today's date?
easy
A. mkdir backup-$(date +%Y-%m-%d)
B. mkdir backup_date
C. mkdir backup $(date +%d-%m-%Y)
D. mkdir backup-`date +%Y/%m/%d`

Solution

  1. Step 1: Understand date command format for folder naming

    The format +%Y-%m-%d gives a date like 2024-06-15, which is safe for folder names.
  2. Step 2: Check each mkdir command for correctness

    mkdir backup-`date +%Y/%m/%d` uses backticks (valid) but produces slashes (/), invalid for folder names. mkdir backup_date uses a literal string without date. mkdir backup $(date +%d-%m-%Y) has a space causing two arguments to mkdir ('backup' and date string). mkdir backup-$(date +%Y-%m-%d) uses correct $( ) substitution and safe hyphen-separated format.
  3. Final Answer:

    mkdir backup-$(date +%Y-%m-%d) -> Option A
  4. Quick Check:

    Safe date format with mkdir = mkdir backup-$(date +%Y-%m-%d) [OK]
Hint: Use $(date +%Y-%m-%d) for safe folder names [OK]
Common Mistakes:
  • Using slashes in folder names
  • Not using command substitution syntax
  • Using underscores instead of date command
3. What will be the output of this script snippet?
backup_dir="backup-$(date +%Y-%m-%d)"
mkdir -p "$backup_dir"
cp -r /home/user/documents "$backup_dir"
Assuming today's date is 2024-06-15 and the documents folder exists.
medium
A. Throws an error because of missing quotes
B. Creates a folder named backup-$(date +%Y-%m-%d) and copies documents inside it
C. Creates a folder named backup-2024-06-15 and copies documents inside it
D. Copies documents to the current directory without creating a folder

Solution

  1. Step 1: Evaluate variable assignment and command substitution

    The variable backup_dir will be set to backup-2024-06-15 because $(date +%Y-%m-%d) runs and inserts the date.
  2. Step 2: Understand mkdir and cp commands with quotes

    mkdir -p creates the directory if it doesn't exist. cp -r copies the documents folder recursively into the backup directory. Quotes ensure spaces are handled safely.
  3. Final Answer:

    Creates a folder named backup-2024-06-15 and copies documents inside it -> Option C
  4. Quick Check:

    Command substitution + mkdir + cp = Creates a folder named backup-2024-06-15 and copies documents inside it [OK]
Hint: Quotes and $(date) create dated backup folders safely [OK]
Common Mistakes:
  • Not using quotes causing errors with spaces
  • Misunderstanding command substitution syntax
  • Assuming cp copies files without -r for folders
4. Identify the error in this backup script snippet:
backup_dir=backup-$(date +%Y-%m-%d)
mkdir $backup_dir
cp -r /home/user/docs $backup_dir
medium
A. Missing quotes around $backup_dir may cause errors if folder name has spaces
B. mkdir command should be mkdir -r instead of mkdir
C. cp command should not use -r for copying directories
D. Date format in variable assignment is incorrect

Solution

  1. Step 1: Check mkdir command usage

    mkdir without -p is okay if folder doesn't exist, but missing quotes around $backup_dir can cause issues if the folder name contains spaces.
  2. Step 2: Check cp command and date format

    cp -r is correct for copying directories. Date format is valid. The main issue is missing quotes around variable usage.
  3. Final Answer:

    Missing quotes around $backup_dir may cause errors if folder name has spaces -> Option A
  4. Quick Check:

    Always quote variables with spaces in paths [OK]
Hint: Always quote variables when used as paths [OK]
Common Mistakes:
  • Using mkdir -r which is invalid
  • Not using -r with cp for directories
  • Incorrect date format syntax
5. You want to automate backups of the /var/log directory daily, keeping backups for 7 days only. Which script snippet correctly creates a dated backup folder and deletes backups older than 7 days?
hard
A. backup_dir="backup-$(date +%Y-%m-%d)" mkdir -p "$backup_dir" cp -r /var/log "$backup_dir" find . -name 'backup-*' -delete
B. backup_dir=backup-$(date +%Y-%m-%d) mkdir $backup_dir cp /var/log $backup_dir rm -rf backup-*
C. backup_dir="backup-$(date +%Y-%m-%d)" mkdir -p "$backup_dir" cp -r /var/log "$backup_dir" rm -rf backup-*
D. backup_dir="backup-$(date +%Y-%m-%d)" mkdir -p "$backup_dir" cp -r /var/log "$backup_dir" find . -maxdepth 1 -name 'backup-*' -mtime +7 -exec rm -rf {} +

Solution

  1. Step 1: Create dated backup folder and copy logs

    Snippets using backup_dir="backup-$(date +%Y-%m-%d)" (double quotes), mkdir -p "$backup_dir", cp -r /var/log "$backup_dir" correctly create dated folder and copy recursively. The other lacks quotes, -p, -r so may fail.
  2. Step 2: Remove backups older than 7 days safely

    rm -rf backup-* and find . -name 'backup-*' -delete delete all backups without age check. Only find . -maxdepth 1 -name 'backup-*' -mtime +7 -exec rm -rf {} + limits to top-level, selects >7 days old, deletes safely.
  3. Final Answer:

    backup_dir="backup-$(date +%Y-%m-%d)" mkdir -p "$backup_dir" cp -r /var/log "$backup_dir" find . -maxdepth 1 -name 'backup-*' -mtime +7 -exec rm -rf {} + -> Option D
  4. Quick Check:

    Safe find with -maxdepth and -mtime +7 = backup_dir="backup-$(date +%Y-%m-%d)" mkdir -p "$backup_dir" cp -r /var/log "$backup_dir" find . -maxdepth 1 -name 'backup-*' -mtime +7 -exec rm -rf {} + [OK]
Hint: Use find with -mtime +7 and -maxdepth 1 to delete old backups [OK]
Common Mistakes:
  • Deleting all backups instead of only old ones
  • Missing -p in mkdir causing errors
  • Using cp without -r for directories
  • Not limiting find depth risking unwanted deletions
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