-
Notifications
You must be signed in to change notification settings - Fork 5.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added Comments and Explanations to Shell Script for Day 8 of 90DaysOfDevOps Challenge with images #340
base: master
Are you sure you want to change the base?
Added Comments and Explanations to Shell Script for Day 8 of 90DaysOfDevOps Challenge with images #340
Changes from all commits
41fea0a
3381635
f105c77
31cb40a
0e4fe08
892b623
c620ce2
b0272b8
b0e5173
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -10,32 +10,137 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Answer** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%201.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%201-2.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%201-3.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Creating createDirectories.sh and adding below content : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
``` bash | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#!/bin/bash | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<<Info | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Author : Amitabh Soni | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Date : 25/11/24 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description : This script takes three arguments and creates a specified number of directories at once. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Example : When executed as ./createDirectories.sh day 1 90, it creates 90 directories as day1, day2, day3, ... day90. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Info | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# For loop to create directories iteratively | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for i in $(seq $2 $3); do | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mkdir "$1$i" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
done | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+27
to
+30
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add argument validation to createDirectories.sh The script needs to validate:
+# Validate number of arguments
+if [ "$#" -ne 3 ]; then
+ echo "Error: Three arguments required"
+ echo "Usage: $0 directory_name start_num end_num"
+ exit 1
+fi
+
+# Validate numeric arguments
+if ! [[ "$2" =~ ^[0-9]+$ ]] || ! [[ "$3" =~ ^[0-9]+$ ]]; then
+ echo "Error: Second and third arguments must be numbers"
+ exit 1
+fi
+
+# Validate range
+if [ "$3" -lt "$2" ]; then
+ echo "Error: End number must be greater than start number"
+ exit 1
+fi
# For loop to create directories iteratively 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task1.1](image/task1.1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- createDirectories.sh | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task1.2](image/task1.2.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2. **Create a Script to Backup All Your Work:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Backups are an important part of a DevOps Engineer's day-to-day activities. The video in the references will help you understand how a DevOps Engineer takes backups (it can feel a bit difficult but keep trying, nothing is impossible). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Answer** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%202.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%202-1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Creating a `backup.sh` file and executing after adding the below content: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
```bash | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#!/bin/bash | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<<Info | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Author : Amitabh Soni | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Date : 25/11/25 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description : This script will take backup of any directory or file and store it in the backup directory: /home/ubuntu/Day-05/backup | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Info | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Creating a function for backup creation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
function create_backup() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Timestamp for backup naming | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
timestamp=$(date '+%Y-%m-%d_%H-%M-%S') | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Target directory where backups are stored | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
target_dir="/home/ubuntu/Day-05/backup" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Backup filename | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
backup_file="${target_dir}/backup_${timestamp}.zip" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Create zip backup | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
zip -r "$backup_file" "$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+63
to
+69
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Make backup directory configurable and ensure it exists The backup directory path should be configurable and the script should ensure it exists before creating backups. -target_dir="/home/ubuntu/Day-05/backup"
+# Allow override through environment variable
+target_dir="${BACKUP_DIR:-/home/ubuntu/Day-05/backup}"
+
+# Ensure backup directory exists
+mkdir -p "$target_dir" || {
+ echo "Error: Cannot create backup directory"
+ exit 1
+} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Checking if the previous command successfully ran or not | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ $? -eq 0 ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
echo "Backup created: ${backup_file}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
echo "Error: Failed to create backup." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
create_backup "$1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task2.1](image/task2.1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- backup.sh : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task2.2](image/task2.2.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Output image : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task2.3](image/task2.3.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3. **Read About Cron and Crontab to Automate the Backup Script:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Cron is the system's main scheduler for running jobs or tasks unattended. A command called crontab allows the user to submit, edit, or delete entries to cron. A crontab file is a user file that holds the scheduling information. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Answer** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%203.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%203-1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Editing crontab for auto backup : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.1](image/task3.1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- setting a backup of Day-04 in every minute : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.2](image/task3.2.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Ensuring whether it creates backup in one minute or not : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.3](image/task3.3.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- checking realtime update in backup dir through 'watch ls' command : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.4](image/task3.4.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- It works for every minute : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.5](image/task3.5.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Final check for backup : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task3.6](image/task3.6.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4. **Read About User Management:** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- A user is an entity in a Linux operating system that can manipulate files and perform several other operations. Each user is assigned an ID that is unique within the system. IDs 0 to 999 are assigned to system users, and local user IDs start from 1000 onwards. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Create 2 users and display their usernames. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Answer** | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![image](https://github.com/Bhavin213/90DaysOfDevOps/blob/master/2024/day05/image/task%204.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Creating users and printing there names : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task4.1](image/task4.1.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- Setting up password the new users : | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![task4.2](image/task4.2.png) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[LinkedIn](https://www.linkedin.com/in/bhavin-savaliya/). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[LinkedIn](https://www.linkedin.com/in/amitabh-devops/). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Add security best practices for shell scripts
Consider adding important security considerations when writing shell scripts:
chmod 700
)set -euo pipefail
for safer execution