From b2e6c7149d4ba322cb8ef0a1ad6e029ebc4d1490 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Fri, 4 Aug 2023 07:01:57 +0530 Subject: [PATCH 01/10] add my solutions to a different branch with my own name --- Challenges/Day_1/solution_day1_script.sh | 55 ++++--- Challenges/Day_2/backup_with_rotation.sh | 80 +++++----- Challenges/Day_2/explorer.sh | 44 +++--- Challenges/Day_3/user_management.sh | 181 ++++++++++++++--------- 4 files changed, 211 insertions(+), 149 deletions(-) diff --git a/Challenges/Day_1/solution_day1_script.sh b/Challenges/Day_1/solution_day1_script.sh index 2b904ef..93853c6 100644 --- a/Challenges/Day_1/solution_day1_script.sh +++ b/Challenges/Day_1/solution_day1_script.sh @@ -1,31 +1,44 @@ #!/bin/bash +# Author: Yashraj Jaiswal +# Date: 01-08-2023 +# Description: #TWSBashBlazeChallenge Day - 1 -# First line of the script is the shebang which tells the system how to execute +# Task 1: Comments +# - Comments are lines in a script that are ignored by the interpreter and help us describe the script. -# Task 2: Echo -echo "Scripting is fun with @TWS" +# Task 2 : echo +echo "Today is Day 1 of #TWSBashBlazeChallenge an amazing bash scripting challenge" -# Task 3: Variables -variable1="Hello" -variable2="Bash" +# Task 3: Variables -# Task 4: Using Variables -greeting="$variable1, $variable2!" -echo "$greeting Welcome to the world of Bash scripting!" +# declaring and initializing variables +name = "Yashraj Jaiswal" +interests = "web dev | devops" -# Task 5: Using Built-in Variables -echo "My current bash path - $BASH" -echo "Bash version I am using - $BASH_VERSION" -echo "PID of bash I am running - $$" -echo "My home directory - $HOME" -echo "Where am I currently? - $PWD" -echo "My hostname - $HOSTNAME" +# Task 4: Using Variables -# Task 6: Wildcards -echo "Files with .txt extension in the current directory:" -ls *.txt +echo "Hello, my name is $name and I am interesed in $interests" +# Task 5: Using Built-in Variables +#use built-in variables from bash to print useful information +# print the host name +echo "Hostname: $HOSTNAME" + +# print the current user +echo "Current user: $USER" + +# print the current working directory +echo "Current directory: $PWD" + +# Task 6: Wildcards + +# using * wild card to search for files ending in .txt +ls -al *.txt + +# using ? wild card to search for files names ending with a single unknown character +ls -al file?.txt + +# using [] wild card to search for files that start with 'file' and have numbers 0-5 +ls -al 'file[0-5]'.txt -#Make sure to provide execution permission with the following command: -#chmod +x day1_script.sh diff --git a/Challenges/Day_2/backup_with_rotation.sh b/Challenges/Day_2/backup_with_rotation.sh index 2c5e56f..e75f389 100644 --- a/Challenges/Day_2/backup_with_rotation.sh +++ b/Challenges/Day_2/backup_with_rotation.sh @@ -1,41 +1,49 @@ #!/bin/bash - -# Function to display usage information and available options -function display_usage { - echo "Usage: $0 /path/to/source_directory" -} - -# Check if a valid directory path is provided as a command-line argument -if [ $# -eq 0 ] || [ ! -d "$1" ]; then - echo "Error: Please provide a valid directory path as a command-line argument." - display_usage +# Author: Yashraj Jaiswal +# Date: 01/08/2023 +# Description: TWSBashBlazeChallenge Day-2 +# Task 2: Directory Backup with Rotation + +# Validate input parameter for the directory to backup +if [ "$#" -ne 1 ]; +then + echo "Usage: $0 " + echo "Hint: enter the full path to the directory to backup" exit 1 fi -# Directory path of the source directory to be backed up -source_dir="$1" - -# Function to create a timestamped backup folder -function create_backup { - local timestamp=$(date '+%Y-%m-%d_%H-%M-%S') # Get the current timestamp - local backup_dir="${source_dir}/backup_${timestamp}" - - # Create the backup folder with the timestamped name - mkdir "$backup_dir" - echo "Backup created successfully: $backup_dir" -} - -# Function to perform the rotation and keep only the last 3 backups -function perform_rotation { - local backups=($(ls -t "${source_dir}/backup_"* 2>/dev/null)) # List existing backups sorted by timestamp - - # Check if there are more than 3 backups - if [ "${#backups[@]}" -gt 3 ]; then - local backups_to_remove="${backups[@]:3}" # Get backups beyond the last 3 - rm -rf "${backups_to_remove[@]}" # Remove the oldest backups - fi -} +path_to_dir="$1" +backup_dir="/var/backups" +max_backup_files=3 + +# Get the number of existing backup files in the backup directory +total_backup_files=$(find "$backup_dir" -type f -name "*.tgz" | wc -l) +echo +echo "Total backup files: $total_backup_files" + +# Check if more than the allowed number of backup files exist +if (( total_backup_files >= max_backup_files )); +then + echo + echo "More than $max_backup_files backup files detected" + # Sort the backup files by modification time and delete the oldest one + oldest_file=$(find "$backup_dir" -type f -name "*.tgz" | sort -r | tail -n 1) + echo "Deleting the oldest backup file - $oldest_file" + sudo rm -f "$oldest_file" +fi -# Main script logic -create_backup -perform_rotation +# Create a new tar file with timestamp in the filename +backup_file="backup_$(date +%d_%m_%Y_%H_%M_%S).tgz" +sudo tar -cvzf "$backup_dir/$backup_file" "$path_to_dir" > /dev/null 2>&1 + +# Check if the tar command executed successfully +if [[ $? -eq 0 ]]; +then + echo + echo "Backup created successfully" + echo "List of backups created in the past 3 days:" + sudo ls -lh "$backup_dir"/*.tgz | awk '{print "-",$NF, "\t(", $5, ")"}' +else + echo "Unable to create backup" +fi +echo \ No newline at end of file diff --git a/Challenges/Day_2/explorer.sh b/Challenges/Day_2/explorer.sh index be62ca1..db9c793 100644 --- a/Challenges/Day_2/explorer.sh +++ b/Challenges/Day_2/explorer.sh @@ -1,23 +1,31 @@ #!/bin/bash +#Author: Yashraj Jaiswal +# Date: 02/08/2023 +# Description: #TWSBashBlazeChallenge Day-2 +# Task 1: Interactive File and Directory Explorer -# Part 1: File and Directory Exploration -echo "Welcome to the Interactive File and Directory Explorer!" +# print a welcome message for the user +echo Welcome to the Interactive File and Directory Explorer! +# Format and display files and directories with their size in human readable format +echo "Files and Directories in current path - $PWD" +ls -lh | sed 1d | awk '{print "- ",$NF,"\t","(",$5,")"}' -while true; do - # List all files and directories in the current path - echo "Files and Directories in the Current Path:" - ls -lh - - # Part 2: Character Counting - read -p "Enter a line of text (Press Enter without text to exit): " input - - # Exit if the user enters an empty string - if [ -z "$input" ]; then - echo "Exiting the Interactive Explorer. Goodbye!" - break +# Infinite loop to continiously take user input +while true; +do + # prompt user to enter a text + echo -n "Enter a line of text (Press Enter without text to exit)" + read input + # use -z option to test for empty string + if [[ -z $input ]]; + then + echo Exiting the interactive explorer. Goodbye! + exit + else + # bash built-in string length + input_length=${#input} + # print the character count on screen + echo "Character count $input_length" fi - - # Calculate and print the character count for the input line - char_count=$(echo -n "$input" | wc -m) - echo "Character Count: $char_count" done + diff --git a/Challenges/Day_3/user_management.sh b/Challenges/Day_3/user_management.sh index 6f77f5d..5e5549a 100644 --- a/Challenges/Day_3/user_management.sh +++ b/Challenges/Day_3/user_management.sh @@ -1,94 +1,127 @@ #!/bin/bash +#Author: Yashraj Jaiswal +# Date: 03/08/2023 +# Description: #TWSBashBlazeChallenge Day-3 +# Task : User Account management -# Function to display usage information and available options -function display_usage { - echo "Usage: $0 [OPTIONS]" - echo "Options:" - echo " -c, --create Create a new user account." - echo " -d, --delete Delete an existing user account." - echo " -r, --reset Reset password for an existing user account." - echo " -l, --list List all user accounts on the system." - echo " -h, --help Display this help and exit." +check_user_exists(){ + id "$1" &> /dev/null + +} +check_group_exists(){ + getent group "$1" &> /dev/null } -# Function to create a new user account -function create_user { - read -p "Enter the new username: " username - - # Check if the username already exists - if id "$username" &>/dev/null; then - echo "Error: The username '$username' already exists. Please choose a different username." +create_user(){ + echo + local user_create_success + local passwd_create_success + read -p "Enter username: " username + check_user_exists "$username" + if (( $? == 0 )) + then + echo Error : $username user already exists else - # Prompt for password (Note: You might want to use 'read -s' to hide the password input) - read -p "Enter the password for $username: " password - - # Create the user account - useradd -m -p "$password" "$username" - echo "User account '$username' created successfully." + read -p "Enter password for user - $username : " password + if (( ${#password} <= 4 )) + then + echo Password should be atleast of 4 characters + else + check_group_exists "$username" + if (( $? == 0 )) + then + sudo useradd -g $username -m $username + else + sudo useradd -m $username + fi + user_create_success=$? + echo "$username:$password" | sudo chpasswd + passwd_create_success=$? + if (( user_create_success == 0 && passwd_create_success == 0 )) + then + echo User added successfully + else + sudo userdel -r $username > /dev/null 2>&1 + echo Unable to add user + fi + fi fi + echo } -# Function to delete an existing user account -function delete_user { - read -p "Enter the username to delete: " username - - # Check if the username exists - if id "$username" &>/dev/null; then - userdel -r "$username" # -r flag removes the user's home directory - echo "User account '$username' deleted successfully." +delete_user(){ + echo + read -p "Enter username : " username + check_user_exists "$username" + if (( $? == 0 )) + then + sudo userdel -r "$username" + if (( $? == 0 )) + then + echo User - "$username", deleted successfully + else + echo Error : unable to delete user + fi else - echo "Error: The username '$username' does not exist. Please enter a valid username." + echo Error : $username user doesnot exists fi + echo } -# Function to reset the password for an existing user account -function reset_password { - read -p "Enter the username to reset password: " username - - # Check if the username exists - if id "$username" &>/dev/null; then - # Prompt for password (Note: You might want to use 'read -s' to hide the password input) - read -p "Enter the new password for $username: " password - - # Set the new password - echo "$username:$password" | chpasswd - echo "Password for user '$username' reset successfully." +reset_user_passwd(){ + echo + read -p "Enter username to reset password : " username + check_user_exists "$username" + if (( $? == 1 )) + then + echo Error : $username user doesnot exists else - echo "Error: The username '$username' does not exist. Please enter a valid username." + read -p "Enter new password for $username : " password + if (( ${#password} <= 4 )) + then + echo Password should be atleast of 4 characters + else + echo "$username:$password" | sudo chpasswd + if (( $? == 0 )) + then + echo Password for user "$username" changed successfully + else + echo Error : Unable to change password for user "$username" + fi + fi fi + echo } -# Function to list all user accounts on the system -function list_users { - echo "User accounts on the system:" - cat /etc/passwd | awk -F: '{ print "- " $1 " (UID: " $3 ")" }' +list_users(){ + echo + echo "List of users on the system:" + sudo cat /etc/passwd | awk -F: '{print $1}' + echo } -# Check if no arguments are provided or if the -h or --help option is given -if [ $# -eq 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then - display_usage - exit 0 -fi +display_script_options(){ + echo + echo "Usage: $0 [OPTIONS]" + echo Options: + echo "-c, --create Create a new user account." + echo "-d, --delete Delete an existing user account." + echo "-r, --reset Reset password for an existing user account." + echo "-l, --list List all user accounts on the system." + echo "-h, --help Display this help and exit." + echo +} -# Command-line argument parsing -while [ $# -gt 0 ]; do - case "$1" in - -c|--create) - create_user - ;; - -d|--delete) - delete_user - ;; - -r|--reset) - reset_password - ;; - -l|--list) - list_users - ;; - *) - echo "Error: Invalid option '$1'. Use '--help' to see available options." - exit 1 - ;; +main(){ + case $1 in + "-c" | "--create") create_user ;; + "-d" | "--delete") delete_user;; + "-r" | "--reset") reset_user_passwd;; + "-l" | "--list") list_users;; + "-h" | "--help") display_script_options;; + *) display_script_options;; esac - shift -done +} + +main "$1" + From dd1aeacdfcc3f76097cd7b493fda82ff6dab6989 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Fri, 4 Aug 2023 09:40:32 +0530 Subject: [PATCH 02/10] day 4 challenge part 1 complete --- Challenges/Day_4/monitor_pro.sh | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Challenges/Day_4/monitor_pro.sh diff --git a/Challenges/Day_4/monitor_pro.sh b/Challenges/Day_4/monitor_pro.sh new file mode 100644 index 0000000..09594d7 --- /dev/null +++ b/Challenges/Day_4/monitor_pro.sh @@ -0,0 +1,60 @@ +#!/bin/bash +#Author: Yashraj Jaiswal +# Date: 03/08/2023 +# Description: #TWSBashBlazeChallenge Day-4 +# Task - part - 1 : Monitoring system process +# script start +# Define the name of the process you want to monitor +PROCESS_NAME="$1" +# Maximum number of restart attempts +MAX_RESTART_ATTEMPTS=3 + +# function to check if the given service exists or not +check_service_exists(){ + systemctl list-unit-files -q -all "$PROCESS_NAME.service" > /dev/null 2>&1 +} + +# Function to check if the process is running +check_process_status() { + systemctl is-active $PROCESS_NAME 2> /dev/null +} + +# Function to restart the process +restart_process() { + echo "Process '$PROCESS_NAME' is not running. Attempting to restart..." + # Loop to check and restart the process + for ((attempt=1; attempt<=$MAX_RESTART_ATTEMPTS; attempt++)); do + local process_status=$(check_process_status) + if [[ "$process_status" == "active" ]]; then + echo "Process '$PROCESS_NAME' is running properly now." + break + else + if [ $attempt -lt $MAX_RESTART_ATTEMPTS ]; then + sudo systemctl restart $PROCESS_NAME + sleep 2 + else + echo "Maximum restart attempts reached. Please check the process '$PROCESS_NAME' manually." + exit 1 + fi + fi + done +} + + +main(){ + # check if the services exists for the given process name + check_service_exists + if [ $? -eq 1 ]; + then + echo "Service for process '$PROCESS_NAME' doesnot exists." + else + local process_status=$(check_process_status) + if [[ "$process_status" == "active" ]]; then + echo "Process '$PROCESS_NAME' is running properly." + else + restart_process + fi + fi +} + +main \ No newline at end of file From c66f48e660b1638cd2383048b0401190cab790f6 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Fri, 4 Aug 2023 10:24:19 +0530 Subject: [PATCH 03/10] day 4 challenge part 1 script update - update checking of process status --- Challenges/Day_4/monitor_pro.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Challenges/Day_4/monitor_pro.sh b/Challenges/Day_4/monitor_pro.sh index 09594d7..d906120 100644 --- a/Challenges/Day_4/monitor_pro.sh +++ b/Challenges/Day_4/monitor_pro.sh @@ -15,17 +15,22 @@ check_service_exists(){ } # Function to check if the process is running -check_process_status() { - systemctl is-active $PROCESS_NAME 2> /dev/null +is_process_active() { + local process_status=$(systemctl is-active $PROCESS_NAME 2> /dev/null) + if [[ "$process_status" == "active" ]]; then + exit 0 + else + exit 1 + fi } # Function to restart the process restart_process() { + echo echo "Process '$PROCESS_NAME' is not running. Attempting to restart..." # Loop to check and restart the process for ((attempt=1; attempt<=$MAX_RESTART_ATTEMPTS; attempt++)); do - local process_status=$(check_process_status) - if [[ "$process_status" == "active" ]]; then + if $(is_process_active); then echo "Process '$PROCESS_NAME' is running properly now." break else @@ -38,23 +43,25 @@ restart_process() { fi fi done + echo } main(){ + echo # check if the services exists for the given process name check_service_exists if [ $? -eq 1 ]; then echo "Service for process '$PROCESS_NAME' doesnot exists." else - local process_status=$(check_process_status) - if [[ "$process_status" == "active" ]]; then + if $(is_process_active); then echo "Process '$PROCESS_NAME' is running properly." else restart_process fi fi + echo } main \ No newline at end of file From f56adde5172027bea3dc45f5f0058984e008ea1f Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Fri, 4 Aug 2023 15:56:20 +0530 Subject: [PATCH 04/10] added solution for part 2 of bash blaze challenge for day 4 --- Challenges/Day_4/monitor_metric.sh | 98 ++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Challenges/Day_4/monitor_metric.sh diff --git a/Challenges/Day_4/monitor_metric.sh b/Challenges/Day_4/monitor_metric.sh new file mode 100644 index 0000000..9707673 --- /dev/null +++ b/Challenges/Day_4/monitor_metric.sh @@ -0,0 +1,98 @@ +#!/bin/bash +#Author: Yashraj Jaiswal +# Date: 03/08/2023 +# Description: #TWSBashBlazeChallenge Day-4 +# Task - part - 2 : Monitoring system metrics +# display metrics and monitor spcific process + +check_service_exists(){ + systemctl list-unit-files -q -all "$1.service" > /dev/null 2>&1 +} + +is_process_active() { + local process_status=$(systemctl is-active "$1" 2> /dev/null) + if [[ "$process_status" == "active" ]]; then + exit 0 + else + exit 1 + fi +} + +# Function to restart the process +restart_process() { + echo "Attempting to start process: $1" + sudo systemctl restart $1 + if $(is_process_active "$1"); then + echo "Process '$1' is running properly now." + else + echo "Unable to start $1 process." + fi + echo +} + +display_system_metrics(){ + local continue_script=1 + until [[ $continue_script -eq 0 ]] + do + echo "----- System metrics -----" + local cpu_usage=$(top -bn1 | grep '%Cpu' | awk '{print $2 + $4}') + local mem_usage=$(free | awk '/Mem/{print $3/$2 * 100.0}') + local disk_usage=$(df -h | awk '/\/dev\/root/{print $5}') + echo "CPU Usage : $cpu_usage%" + echo "Memory Usage : $mem_usage%" + echo "Disk Space : $disk_usage" + echo "----- System metrics -----" + echo "1. Print metrics again | 2. Go to main menu" + read -p "Enter your choice: " choice + + if [[ $choice -eq 1 ]]; then + continue_script=1 + else + continue_script=0 + fi + done +} + +monitor_service(){ + echo + echo "---------- Monitor a specific service ----------" + read -p "Enter the name of the service you want to monitor : " service_name + check_service_exists "$service_name" + if [ $? -eq 1 ]; + then + echo "Service for process - $service_name doesnot exists." + else + if $(is_process_active "$service_name"); then + echo "$service_name is running." + else + echo "$service_name process is not running" + read -p "Do you want to start $service_name (y/n) " choice + if [ "$choice" == "y" ]; then + restart_process "$service_name" + fi + fi + fi +} + +main() { + local continue_script=0 + while [[ $continue_script -eq 0 ]] + do + echo + echo "---------- Monitoring metrics script ----------" + echo "1. View system metrics." + echo "2. Monitor a specific service." + echo "3. Exit" + echo "---------- Monitoring metrics script ----------" + echo + read -p "Enter your choice: " choice + case $choice in + 1) display_system_metrics;; + 2) monitor_service;; + 3) continue_script=1 ;; + *) continue_script=1 ;; + esac + done +} + +main \ No newline at end of file From 0e865041654145ccfdbfdb4a78923bf9b457139b Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Sat, 5 Aug 2023 18:04:29 +0530 Subject: [PATCH 05/10] added solution for day 5 in bash blaze challenge --- Challenges/Day_5/my_sol_log_analyzer.sh | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 Challenges/Day_5/my_sol_log_analyzer.sh diff --git a/Challenges/Day_5/my_sol_log_analyzer.sh b/Challenges/Day_5/my_sol_log_analyzer.sh new file mode 100644 index 0000000..aec137b --- /dev/null +++ b/Challenges/Day_5/my_sol_log_analyzer.sh @@ -0,0 +1,63 @@ +#!/bin/bash +#Author: Yashraj Jaiswal +# Date: 05/08/2023 +# Description: #TWSBashBlazeChallenge Day-5 +# Task : create a log analyzer script + +function error_count(){ + egrep -i -c "ERROR|faliure" $1 +} + +function critical_events(){ + filename="your_file.txt" + pattern="CRITICAL" + line_number=1 + while IFS= read -r line; do + if [[ $line == *"$pattern"* ]]; then + echo "Line $line_number: $line" + fi + ((line_number++)) + done < "$1" +} + +function top5_error_message(){ + egrep -i "ERROR|faliure" "$1" | sort | rev | cut -d ' ' -f 3- | rev | uniq -c | sort -r | head -5 +} + +function generate_summary(){ + echo "Date of analysis : $(date +"%D")" + echo "Log file name : $1" + echo "Total line processed : $(wc -l $1 | awk '{print $1}')" + echo "Total error count : $(error_count $1)" + echo + echo + echo "Top 5 error messages:" + echo + top5_error_message "$1" + echo + echo + echo "List of critical events with line number : " + echo + critical_events "$1" +} + +function main(){ + # check if the user has passed any file in command line + if (( $# == 0 )); then + echo "Info : this script analyzes a log file and creates a summary out of it." + echo "Usage : $0 path-to-file." + exit 1 + fi + # check if the given file is empty or not. + if [ ! -s "$1" ]; then + echo "$1 file is empty" + exit 1 + fi + local log_summary_file="log_summary_$(date +"%Y_%m_%d").txt" + touch "$log_summary_file" + generate_summary "$1" > "$log_summary_file" + sudo mv "./$log_summary_file" /var/log + echo "Summary report generated: /var/log/$log_summary_file" +} + +main "$1" \ No newline at end of file From 9db7e1a49377bb6b6a917add7815ff6938ab587b Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Sun, 6 Aug 2023 07:25:08 +0530 Subject: [PATCH 06/10] added solution for mystery bash script for day 6 --- Challenges/Day_4/Sol_monitor_process.sh | 48 --------- Challenges/Day_4/Sol_monitoring_script.sh | 62 ------------ Challenges/Day_5/log_analyzer.sh | 117 ++++++++++++---------- Challenges/Day_5/my_sol_log_analyzer.sh | 63 ------------ Challenges/Day_6/broken_myst/mystery.sh | 44 +++----- 5 files changed, 75 insertions(+), 259 deletions(-) delete mode 100644 Challenges/Day_4/Sol_monitor_process.sh delete mode 100644 Challenges/Day_4/Sol_monitoring_script.sh delete mode 100644 Challenges/Day_5/my_sol_log_analyzer.sh diff --git a/Challenges/Day_4/Sol_monitor_process.sh b/Challenges/Day_4/Sol_monitor_process.sh deleted file mode 100644 index 2cd9bbf..0000000 --- a/Challenges/Day_4/Sol_monitor_process.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -# Function to check if the specified process is running -is_process_running() { - if pgrep -x "$1" >/dev/null; then - return 0 - else - return 1 - fi -} - -# Function to restart the process using systemctl -restart_process() { - local process_name="$1" - echo "Process $process_name is not running. Attempting to restart..." - - # Check if the user has the privilege to restart the process - if sudo systemctl restart "$process_name"; then - echo "Process $process_name restarted successfully." - else - echo "Failed to restart $process_name. Please check the process manually." - fi -} - -# Check if a process name is provided as an argument -if [ $# -eq 0 ]; then - echo "Usage: $0 " - exit 1 -fi - -process_name="$1" -max_attempts=3 -attempt=1 - -# Loop to check and restart the process -while [ $attempt -le $max_attempts ]; do - if is_process_running "$process_name"; then - echo "Process $process_name is running." - else - restart_process "$process_name" - fi - - attempt=$((attempt + 1)) - sleep 5 # Wait for 5 seconds before the next check -done - -echo "Maximum restart attempts reached. Please check the process manually." - diff --git a/Challenges/Day_4/Sol_monitoring_script.sh b/Challenges/Day_4/Sol_monitoring_script.sh deleted file mode 100644 index dbe41a0..0000000 --- a/Challenges/Day_4/Sol_monitoring_script.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# Function to display system metrics (CPU, memory, disk space) -function view_system_metrics() { - echo "---- System Metrics ----" - # Fetch CPU usage using `top` command and extract the value using awk - cpu_usage=$(top -bn 1 | grep '%Cpu' | awk '{print $2}') - # Fetch memory usage using `free` command and extract the value using awk - mem_usage=$(free | grep Mem | awk '{printf("%.1f", $3/$2 * 100)}') - # Fetch disk space usage using `df` command and extract the value using awk - disk_usage=$(df -h / | tail -1 | awk '{print $5}') - - echo "CPU Usage: $cpu_usage% Mem Usage: $mem_usage% Disk Space: $disk_usage" -} - -# Function to monitor a specific service -function monitor_service() { - echo "---- Monitor a Specific Service ----" - read -p "Enter the name of the service to monitor: " service_name - - # Check if the service is running using `systemctl` command - if systemctl is-active --quiet $service_name; then - echo "$service_name is running." - else - echo "$service_name is not running." - read -p "Do you want to start $service_name? (Y/N): " choice - if [ "$choice" = "Y" ] || [ "$choice" = "y" ]; then - # Start the service using `systemctl` command - systemctl start $service_name - echo "$service_name started successfully." - fi - fi -} - -# Main loop for continuous monitoring -while true; do - echo "---- Monitoring Metrics Script ----" - echo "1. View System Metrics" - echo "2. Monitor a Specific Service" - echo "3. Exit" - - read -p "Enter your choice (1, 2, or 3): " choice - - case $choice in - 1) - view_system_metrics - ;; - 2) - monitor_service - ;; - 3) - echo "Exiting the script. Goodbye!" - exit 0 - ;; - *) - echo "Error: Invalid option. Please choose a valid option (1, 2, or 3)." - ;; - esac - - # Sleep for 5 seconds before displaying the menu again - sleep 5 -done diff --git a/Challenges/Day_5/log_analyzer.sh b/Challenges/Day_5/log_analyzer.sh index 70779dc..aec137b 100644 --- a/Challenges/Day_5/log_analyzer.sh +++ b/Challenges/Day_5/log_analyzer.sh @@ -1,56 +1,63 @@ #!/bin/bash - -# Check if the user provided the log file path as a command-line argument -if [ $# -ne 1 ]; then - echo "Usage: $0 " - exit 1 -fi - -# Get the log file path from the command-line argument -log_file="$1" - -# Check if the log file exists -if [ ! -f "$log_file" ]; then - echo "Error: Log file not found: $log_file" - exit 1 -fi - -# Step 1: Count the total number of lines in the log file -total_lines=$(wc -l < "$log_file") - -# Step 2: Count the number of error messages (identified by the keyword "ERROR" in this example) -error_count=$(grep -c -i "ERROR" "$log_file") - -# Step 3: Search for critical events (lines containing the keyword "CRITICAL") and store them in an array -mapfile -t critical_events < <(grep -n -i "CRITICAL" "$log_file") - -# Step 4: Identify the top 5 most common error messages and their occurrence count using associative arrays -declare -A error_messages -while IFS= read -r line; do - # Use awk to extract the error message (fields are space-separated) - error_msg=$(awk '{for (i=3; i<=NF; i++) printf $i " "; print ""}' <<< "$line") - ((error_messages["$error_msg"]++)) -done < <(grep -i "ERROR" "$log_file") - -# Sort the error messages by occurrence count (descending order) -sorted_error_messages=$(for key in "${!error_messages[@]}"; do - echo "${error_messages[$key]} $key" -done | sort -rn | head -n 5) - -# Step 5: Generate the summary report in a separate file -summary_report="log_summary_$(date +%Y-%m-%d).txt" -{ - echo "Date of analysis: $(date)" - echo "Log file: $log_file" - echo "Total lines processed: $total_lines" - echo "Total error count: $error_count" - echo -e "\nTop 5 error messages:" - echo "$sorted_error_messages" - echo -e "\nCritical events with line numbers:" - for event in "${critical_events[@]}"; do - echo "$event" - done -} > "$summary_report" - -echo "Summary report generated: $summary_report" - +#Author: Yashraj Jaiswal +# Date: 05/08/2023 +# Description: #TWSBashBlazeChallenge Day-5 +# Task : create a log analyzer script + +function error_count(){ + egrep -i -c "ERROR|faliure" $1 +} + +function critical_events(){ + filename="your_file.txt" + pattern="CRITICAL" + line_number=1 + while IFS= read -r line; do + if [[ $line == *"$pattern"* ]]; then + echo "Line $line_number: $line" + fi + ((line_number++)) + done < "$1" +} + +function top5_error_message(){ + egrep -i "ERROR|faliure" "$1" | sort | rev | cut -d ' ' -f 3- | rev | uniq -c | sort -r | head -5 +} + +function generate_summary(){ + echo "Date of analysis : $(date +"%D")" + echo "Log file name : $1" + echo "Total line processed : $(wc -l $1 | awk '{print $1}')" + echo "Total error count : $(error_count $1)" + echo + echo + echo "Top 5 error messages:" + echo + top5_error_message "$1" + echo + echo + echo "List of critical events with line number : " + echo + critical_events "$1" +} + +function main(){ + # check if the user has passed any file in command line + if (( $# == 0 )); then + echo "Info : this script analyzes a log file and creates a summary out of it." + echo "Usage : $0 path-to-file." + exit 1 + fi + # check if the given file is empty or not. + if [ ! -s "$1" ]; then + echo "$1 file is empty" + exit 1 + fi + local log_summary_file="log_summary_$(date +"%Y_%m_%d").txt" + touch "$log_summary_file" + generate_summary "$1" > "$log_summary_file" + sudo mv "./$log_summary_file" /var/log + echo "Summary report generated: /var/log/$log_summary_file" +} + +main "$1" \ No newline at end of file diff --git a/Challenges/Day_5/my_sol_log_analyzer.sh b/Challenges/Day_5/my_sol_log_analyzer.sh deleted file mode 100644 index aec137b..0000000 --- a/Challenges/Day_5/my_sol_log_analyzer.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -#Author: Yashraj Jaiswal -# Date: 05/08/2023 -# Description: #TWSBashBlazeChallenge Day-5 -# Task : create a log analyzer script - -function error_count(){ - egrep -i -c "ERROR|faliure" $1 -} - -function critical_events(){ - filename="your_file.txt" - pattern="CRITICAL" - line_number=1 - while IFS= read -r line; do - if [[ $line == *"$pattern"* ]]; then - echo "Line $line_number: $line" - fi - ((line_number++)) - done < "$1" -} - -function top5_error_message(){ - egrep -i "ERROR|faliure" "$1" | sort | rev | cut -d ' ' -f 3- | rev | uniq -c | sort -r | head -5 -} - -function generate_summary(){ - echo "Date of analysis : $(date +"%D")" - echo "Log file name : $1" - echo "Total line processed : $(wc -l $1 | awk '{print $1}')" - echo "Total error count : $(error_count $1)" - echo - echo - echo "Top 5 error messages:" - echo - top5_error_message "$1" - echo - echo - echo "List of critical events with line number : " - echo - critical_events "$1" -} - -function main(){ - # check if the user has passed any file in command line - if (( $# == 0 )); then - echo "Info : this script analyzes a log file and creates a summary out of it." - echo "Usage : $0 path-to-file." - exit 1 - fi - # check if the given file is empty or not. - if [ ! -s "$1" ]; then - echo "$1 file is empty" - exit 1 - fi - local log_summary_file="log_summary_$(date +"%Y_%m_%d").txt" - touch "$log_summary_file" - generate_summary "$1" > "$log_summary_file" - sudo mv "./$log_summary_file" /var/log - echo "Summary report generated: /var/log/$log_summary_file" -} - -main "$1" \ No newline at end of file diff --git a/Challenges/Day_6/broken_myst/mystery.sh b/Challenges/Day_6/broken_myst/mystery.sh index dba59f3..30c25b1 100644 --- a/Challenges/Day_6/broken_myst/mystery.sh +++ b/Challenges/Day_6/broken_myst/mystery.sh @@ -1,43 +1,25 @@ #!/bin/bash - -# Welcome to the Mysterious Script Challenge! -# Your task is to unravel the mystery behind this script and understand what it does. -# Once you've deciphered its objective, your mission is to improve the script by adding comments and explanations for clarity. - -# DISCLAIMER: This script is purely fictional and does not perform any harmful actions. -# It's designed to challenge your scripting skills and creativity. - # The Mysterious Function mysterious_function() { - local input_file="$1" - local output_file="$2" - - # + local input_file="$1" # Store the input file path + local output_file="$2" # Store the output file path + # Step 1: Apply a ROT13-like cipher to input_file and save the result in output_file tr 'A-Za-z' 'N-ZA-Mn-za-m' < "$input_file" > "$output_file" - - # + # Step 2: Reverse the text from output_file and save it in reversed_temp.txt rev "$output_file" > "reversed_temp.txt" - - # + # Step 3: Generate a random number between 1 and 10 random_number=$(( ( RANDOM % 10 ) + 1 )) - - # Mystery loop: + # Repeat the following block of operations random_number times for (( i=0; i<$random_number; i++ )); do - # + # Step 4: Reverse the text from reversed_temp.txt and save it in temp_rev.txt rev "reversed_temp.txt" > "temp_rev.txt" - - # + # Step 5: Apply the same ROT13-like cipher to temp_rev.txt and save it in temp_enc.txt tr 'A-Za-z' 'N-ZA-Mn-za-m' < "temp_rev.txt" > "temp_enc.txt" - - # + # Step 6: Replace reversed_temp.txt with temp_enc.txt mv "temp_enc.txt" "reversed_temp.txt" done - - # Clean up temporary files + # Clean up: Remove the temporary file temp_rev.txt rm "temp_rev.txt" - - # The mystery continues... - # The script will continue with more operations that you need to figure out! } # Main Script Execution @@ -48,8 +30,8 @@ if [ $# -ne 2 ]; then exit 1 fi -input_file="$1" -output_file="$2" +input_file="$1" # Store the input file path +output_file="$2" # Store the output file path # Check if the input file exists if [ ! -f "$input_file" ]; then @@ -61,4 +43,4 @@ fi mysterious_function "$input_file" "$output_file" # Display the mysterious output -echo "The mysterious process is complete. Check the '$output_file' for the result!" +echo "The mysterious process is complete. Check the '$output_file' for the result!" \ No newline at end of file From 9697a36a3b0cda086c4d9927e79ad62ba0d419f7 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Sun, 6 Aug 2023 07:26:58 +0530 Subject: [PATCH 07/10] add proper description to mystery.sh file --- Challenges/Day_6/broken_myst/mystery.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Challenges/Day_6/broken_myst/mystery.sh b/Challenges/Day_6/broken_myst/mystery.sh index 30c25b1..676e12b 100644 --- a/Challenges/Day_6/broken_myst/mystery.sh +++ b/Challenges/Day_6/broken_myst/mystery.sh @@ -1,5 +1,8 @@ #!/bin/bash -# The Mysterious Function +# Date: 06/08/2023 +# Description: #TWSBashBlazeChallenge Day-6 +# Task, part -1 : Analyzing the Mysterious Function + mysterious_function() { local input_file="$1" # Store the input file path local output_file="$2" # Store the output file path From 0f7615674088da787b5a2155ce3f8a2c6199b4a3 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Sun, 6 Aug 2023 13:30:38 +0530 Subject: [PATCH 08/10] broken restro script fixed --- .../Day_6/broken_resto/restaurant_order.sh | 123 +++++++++++------- 1 file changed, 78 insertions(+), 45 deletions(-) diff --git a/Challenges/Day_6/broken_resto/restaurant_order.sh b/Challenges/Day_6/broken_resto/restaurant_order.sh index 2f64c3e..b0cca3e 100644 --- a/Challenges/Day_6/broken_resto/restaurant_order.sh +++ b/Challenges/Day_6/broken_resto/restaurant_order.sh @@ -1,57 +1,90 @@ #!/bin/bash +# This is a bash script that simulates a restaurant ordering system. -# Function to read and display the menu from menu.txt file +# Declare associative arrays to store menu item values, ordered quantities, and menu items. +declare -A menu_item_value +declare -A item_quantity_ordered +declare -A menu_items + +# Function to read menu items and their values from a file and populate the associative arrays. +function populate_menu() { + local menu_file="./menu.txt" + local index=0 + while IFS=", " read -r menu_item menu_item_value; do + menu_items[$index]=$menu_item + menu_item_value[$menu_item]=$menu_item_value + ((index++)) + done < "$menu_file" +} + +# Function to display the menu items and their corresponding values. function display_menu() { - echo "Welcome to the Restaurant!" - echo "Menu:" - # TODO: Read the menu from menu.txt and display item numbers and prices - # Format: 1. Burger - ₹120 - # 2. Pizza - ₹250 - # 3. Salad - ₹180 - # ... + local index=1 + for key in "${menu_items[@]}"; do + echo -e "$index. $key \t- ₹ ${menu_item_value[$key]}" + ((index++)) + done +} + +# Function to take the customer's order for various menu items. +function take_order() { + local index=1 + echo "Menu items will appear one at a time. Enter the quantity when prompted." + echo "If you don't require an item, just press enter, and we will move to the next item." + + # take input for every item in the menu + for key in "${menu_items[@]}"; do + # take input from the customer until a numeric value is added + while true; do + read -p "$index. $key: " quantity + # if input is empty move to next item + if [[ -z "$quantity" ]]; then + break + # add to order only when input is a number + elif [[ $quantity =~ ^[0-9]+$ ]]; then + item_quantity_ordered["$key"]=$quantity + break + # for any input other than a number keep prompting the user for a numeric input + else + # Print an informative message to indicate the user that the input can only be a number. + echo "Invalid input, enter quantity in number. Or press enter if item not required." + continue + fi + done + ((index++)) + done } -# Function to calculate the total bill +# Function to calculate the total bill based on the ordered quantities and item values. function calculate_total_bill() { local total=0 - # TODO: Calculate the total bill based on the customer's order - # The order information will be stored in an array "order" - # The array format: order[] = - # Prices are available in the same format as the menu display - # Example: If the customer ordered 2 Burgers and 1 Salad, the array will be: - # order[1]=2, order[3]=1 - # The total bill should be the sum of (price * quantity) for each item in the order. - # Store the calculated total in the "total" variable. - echo "$total" + for key in "${menu_items[@]}"; do + total=$((total + menu_item_value[$key] * item_quantity_ordered[$key])) + done + echo $total } -# Function to handle invalid user input -function handle_invalid_input() { - echo "Invalid input! Please enter a valid item number and quantity." +# Main function to execute the restaurant ordering process. +function main(){ + echo Welcome to the bash blaze restaurant + read -p "What's your name please : " customer_name + echo "$customer_name, here is our fantastic menu:" + # Show the menu to the customer + display_menu + echo Ready to order!! + # Take the customer's order + take_order + echo "Enjoy your meal, $customer_name..." + echo + echo + sleep 2 + echo "Thank you, $customer_name, for dining at our Bash Blaze restaurant." + # Generate the bill and present it to the customer + echo "Your total bill is: ₹$(calculate_total_bill)" } -# Main script -display_menu - -# Ask for the customer's name -# TODO: Ask the customer for their name and store it in a variable "customer_name" - -# Ask for the order -echo "Please enter the item number and quantity (e.g., 1 2 for two Burgers):" -read -a input_order - -# Process the customer's order -declare -A order -for (( i=0; i<${#input_order[@]}; i+=2 )); do - item_number="${input_order[i]}" - quantity="${input_order[i+1]}" - # TODO: Add the item number and quantity to the "order" array -done - -# Calculate the total bill -total_bill=$(calculate_total_bill) - -# Display the total bill with a personalized thank-you message -# TODO: Display a thank-you message to the customer along with the total bill -# The message format: "Thank you, ! Your total bill is ₹." +# Populate the menu items and values from the file. +populate_menu +# Call the main function to start the ordering process. +main From 9d1b7a782d0490ff7362598a39236a6355128c29 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Sun, 6 Aug 2023 16:48:29 +0530 Subject: [PATCH 09/10] added solution for part 3 of day 6 challenge --- .../Day_6/broken_resto/restaurant_order.sh | 5 ++- .../Day_6/broken_search/recursive_search.sh | 41 ++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/Challenges/Day_6/broken_resto/restaurant_order.sh b/Challenges/Day_6/broken_resto/restaurant_order.sh index b0cca3e..cba8561 100644 --- a/Challenges/Day_6/broken_resto/restaurant_order.sh +++ b/Challenges/Day_6/broken_resto/restaurant_order.sh @@ -1,5 +1,8 @@ #!/bin/bash -# This is a bash script that simulates a restaurant ordering system. +#Author: Yashraj Jaiswal +# Date: 05/08/2023 +# Description: #TWSBashBlazeChallenge Day-6 +# Task part - 2 : fix the restaurant ordering system script # Declare associative arrays to store menu item values, ordered quantities, and menu items. declare -A menu_item_value diff --git a/Challenges/Day_6/broken_search/recursive_search.sh b/Challenges/Day_6/broken_search/recursive_search.sh index 501af36..36f1958 100644 --- a/Challenges/Day_6/broken_search/recursive_search.sh +++ b/Challenges/Day_6/broken_search/recursive_search.sh @@ -1,14 +1,45 @@ #!/bin/bash +#Author: Yashraj Jaiswal +# Date: 05/08/2023 +# Description: #TWSBashBlazeChallenge Day-6 +# Task part -3 : fix the recursive search script if [ $# -ne 2 ]; then - echo "Usage: ./recursive_search.sh " - exit 1 + echo "Usage : ./recursive_search.sh " + exit 1 fi -search_directory=$1 -target_file=$2 +search_dir="$1" +target_file="$2" -# TODO: Implement the recursive search logic here +# Function to perform recursive search for the target file +function recursive_file_search { + local current_dir="$1" + + # Loop through the contents of the current directory + for file in "$current_dir"/*; do + if [ -d "$file" ]; then + # If the current item is a directory, call the recursive_file_search function to check within the sub directory + recursive_file_search "$file" + elif [ -f "$file" ] && [[ "$(basename "$file")" == "$target_file" ]]; then + # If the current item is a file and its name matches the target file, print a success message + # then print the absolute path of the file + echo "File found!!!" + echo "Absolute path of $target_file - $file" + exit 0 + fi + done +} +# Check if the provided directory exists +if [ ! -d "$search_dir" ]; then + echo "Error: Directory '$search_dir' not found." + exit 1 +fi + +# Start the recursive search by calling the recursive_file_search function with the provided search directory +recursive_file_search "$search_dir" + +# If the loop completes without finding the target file, display a "File not found" message and exit with an error echo "File not found: $target_file" exit 1 From f1459623f228495d9f54059f0b7c6542935a5d63 Mon Sep 17 00:00:00 2001 From: yash91989201 Date: Tue, 8 Aug 2023 00:06:02 +0530 Subject: [PATCH 10/10] day 7 challenge finish --- Challenges/Day_7/deploy_app.png | Bin 0 -> 39605 bytes Challenges/Day_7/deploy_app.sh | 57 ++++++++++++ Challenges/Day_7/project_running.png | Bin 0 -> 11693 bytes Challenges/Day_7/remote_execute.sh | 112 +++++++++++++++++++++++ Challenges/Day_7/remote_execute_snip.png | Bin 0 -> 111932 bytes Challenges/Day_7/secure_transfer.png | Bin 0 -> 36881 bytes Challenges/Day_7/secure_transfer.sh | 59 ++++++++++++ 7 files changed, 228 insertions(+) create mode 100644 Challenges/Day_7/deploy_app.png create mode 100644 Challenges/Day_7/deploy_app.sh create mode 100644 Challenges/Day_7/project_running.png create mode 100644 Challenges/Day_7/remote_execute.sh create mode 100644 Challenges/Day_7/remote_execute_snip.png create mode 100644 Challenges/Day_7/secure_transfer.png create mode 100644 Challenges/Day_7/secure_transfer.sh diff --git a/Challenges/Day_7/deploy_app.png b/Challenges/Day_7/deploy_app.png new file mode 100644 index 0000000000000000000000000000000000000000..65e0509ca03dc60e151b62c963a4a85eaebe0af3 GIT binary patch literal 39605 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 literal 0 HcmV?d00001 diff --git a/Challenges/Day_7/deploy_app.sh b/Challenges/Day_7/deploy_app.sh new file mode 100644 index 0000000..bb4b10b --- /dev/null +++ b/Challenges/Day_7/deploy_app.sh @@ -0,0 +1,57 @@ +#!/bin/bash +function validate_cmd_arg_input(){ + echo "Step 1. Validating given files." + + for file in "$@"; do + if [ ! -e "$file" ];then + echo "$file doesnot exists." + exit 1 + fi + if [ ! -s "$file" ]; then + echo "$file is empty." + exit 1 + fi + done + echo "> File validation successful." +} + +function populate_client_list() { + echo + echo "Step 2. Load client list data from $1 file into the script." + + local index=1 + while IFS=', ' read -r name ip || [[ -n "$name" ]]; do + if [[ -n "$name" ]]; then + echo "Read: name='$name', ip='$ip'" + client_name_list[$index]=$name + client_ip_list["$name"]=$ip + ((index++)) + fi + done < "$1" + + echo "> Done." +} + +function connect_and_execute(){ + ssh -o StrictHostKeyChecking=no -i ./ec2key "ubuntu@$1" "$2" +} + +function deploy_app(){ + for client_name in "${client_name_list[@]}";do + local client_ip="${client_ip_list[$client_name]}" + echo "Deploying app on $client_ip" + connect_and_execute "$client_ip" "cd node_docker && sudo docker-compose -f docker-compose.yaml -f docker-compose.prod.yaml up -d" + echo + done +} + +function main(){ + if [ $# -ne 2 ];then + echo "Usage: ./secure_transfer.sh client_list_file clint_auth_key" + else + validate_cmd_arg_input $@ + populate_client_list "$1" + deploy_app + fi +} +main "$1" "$2" diff --git a/Challenges/Day_7/project_running.png b/Challenges/Day_7/project_running.png new file mode 100644 index 0000000000000000000000000000000000000000..0c02cae341b9125ce585a13b4386e8e2750606c7 GIT binary patch literal 11693 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 The client ip list file provided does not exists." + exit 1 + fi + # check if the client list file is empty or not + if [ ! -s "$1" ]; then + echo "> The client ip list file provided is empty , please check and execute again" + exit 1 + fi + + echo "> File validation successful." +} + + +function populate_client_list() { + echo + echo "Step 2. Load client list data from $1 file in the script." + + local index=1 + while IFS=', ' read -r name ip || [[ -n "$name" ]]; do + if [[ -n "$name" ]]; then + echo "Read: name='$name', ip='$ip'" + client_name_list[$index]=$name + client_ip_list["$name"]=$ip + ((index++)) + fi + done < "$1" + + echo "> Done." +} + +function connect_and_execute(){ + ssh -o StrictHostKeyChecking=no -i ./ec2key "ubuntu@$1" "$2" +} + +function install_packages(){ + echo "Step 3. Installing packages on all clients." + + for client_name in "${client_name_list[@]}";do + local client_ip="${client_ip_list[$client_name]}" + echo + echo "Checking for docker on $client_ip" + connect_and_execute "$client_ip" "which docker > /dev/null 2>&1" + docker_installed=$? + + if [ $docker_installed -eq 0 ];then + echo "Docker is already installed." + echo + else + echo + echo "Docker doesnot exists on $client_ip" + echo "Installing now..." + connect_and_execute "$client_ip" "sudo apt-get update && sudo apt install docker.io -y > /dev/null 2>&1" + if [ $? -eq 0 ];then + echo "Docker successfully installed on $client_ip" + else + echo "Unable to install docker." + fi + fi + + echo "Installing docker compose on $client_ip" + connect_and_execute "$client_ip" "sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose > /dev/null 2>&1" + echo + echo "Checking for nginx on $client_ip" + + connect_and_execute "$client_ip" "which nginx > /dev/null 2>&1" + nginx_installed=$? + + if [ $nginx_installed -eq 0 ];then + echo "Nginx is already installed." + else + echo + echo "Nginx doesnot exists on $client_ip" + echo "Installing now..." + connect_and_execute "$client_ip" "sudo apt-get update && sudo apt install nginx -y > /dev/null 2>&1" + if [ $? -eq 0 ];then + echo "Nginx successfully installed on $client_ip" + else + echo "Unable to install nginx." + fi + fi + + done +} + +function main(){ + # validate user input + validate_cmd_arg_input "$1" + sleep 1 + # populate client list data from the given flile + populate_client_list "$1" + sleep 1 + # if ssh key doesnot exists create it + install_packages +} + +main "$1" \ No newline at end of file diff --git a/Challenges/Day_7/remote_execute_snip.png b/Challenges/Day_7/remote_execute_snip.png new file mode 100644 index 0000000000000000000000000000000000000000..13ef4a1afea80a565f08d388c2a554046fbb190d GIT binary patch literal 111932 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 Rv;SHBmiEoUKOa2({{Xu%SWf@| literal 0 HcmV?d00001 diff --git a/Challenges/Day_7/secure_transfer.sh b/Challenges/Day_7/secure_transfer.sh new file mode 100644 index 0000000..ed6d66c --- /dev/null +++ b/Challenges/Day_7/secure_transfer.sh @@ -0,0 +1,59 @@ +#!/bin/bash +declare -A client_name_list +declare -A client_ip_list + +function validate_cmd_arg_input(){ + echo "Step 1. Validating given files." + + for file in "$@"; do + if [ ! -e "$file" ];then + echo "$file doesnot exists." + exit 1 + fi + if [ ! -s "$file" ]; then + echo "$file is empty." + exit 1 + fi + done + echo "> File validation successful." +} + +function populate_client_list() { + echo + echo "Step 2. Load client list data from $1 file into the script." + + local index=1 + while IFS=', ' read -r name ip || [[ -n "$name" ]]; do + if [[ -n "$name" ]]; then + echo "Read: name='$name', ip='$ip'" + client_name_list[$index]=$name + client_ip_list["$name"]=$ip + ((index++)) + fi + done < "$1" + + echo "> Done." +} + +function connect_and_execute(){ + ssh -o StrictHostKeyChecking=no -i ./ec2key "ubuntu@$1" "$2" +} + +function transfer_file(){ + for client_name in "${client_name_list[@]}";do + local client_ip="${client_ip_list[$client_name]}" + echo "Transferring project file to $client_ip" + scp -o StrictHostKeyChecking=no -i "$1" -r node_docker "ubuntu@$client_ip:/home/ubuntu" > /dev/null 2>&1 + done +} + +function main(){ + if [ $# -ne 2 ];then + echo "Usage: ./secure_transfer.sh client_list_file clint_auth_key" + else + validate_cmd_arg_input $@ + populate_client_list "$1" + transfer_file "$2" + fi +} +main "$1" "$2" \ No newline at end of file