====================== Linux Architecture ====================== => Linux is free OS & open source => Multi User based os => Linux is secured => Linux is CLI based os => Linux is highly recommended for project related servers Ex: Database, docker, sonar, jenkins, nexus, k8s.... ================================ Linux Architecture Components =============================== 1) Applications / Commands 2) Shell 3) Kernel 4) Hardware components =================== What is shell ? =================== => Shell acts as mediator between user and kernel. => Shell is responsible to process user given commands. Note: when we execute a command, shell verify command syntax. If commad is valid then shell will convert that command into kernel understable format. # check default shell of our linux vm $ echo $SHELL # display all shells supported by linux vm $ cat /etc/shells ========================== What is Kernel in linux ? ========================== => Kernel is heart of Linux OS => Kernel is a mediator between SHELL and Hardware components. => Kernel will get instructions from shell then kernel will convert that command into hardware understandable format. # print kernel version $ uname -r ====================== What is scripting ? ====================== => Scripting means set of commands we are keeping in a file for execution. => Scripting is used to automate our daily routine work => For example, i want to execute below commands on daily basis whoami pwd date cal ls -l Note: instead of executing these commands one after other manually we can keep them inside a file and we can execute that file which is called as Scripting. => The process of executing script file using shell is called as shell scripting. => Shell scripting is used to automate our daily routine works in the project. Ex: a) take backup b) delete temp files c) analyze log files d) system health checks => shell script files will have .sh extension ex : backup.sh, log-analyzer.sh, health-checks.sh ==================================================== What is difference between programming & scripting ==================================================== => Program requies compilation for executing Ex: C, C++, Java, C# => Script can be executed directley (no compilation). Ex : Bash, Perl, Python ============================ what is sha-bang in linux ? ============================ => sha-bang is used to specify which shell we should use to process our script file. syntax: #! /bin/bash Note: Writing sha-bang is not mandatory but recommended. ################################################################################## Date : 19-July-2024 Topic : Shell Scripting ################################################################################## ============= 01 : Shell Script =========== #! /bin/bash echo "Enter your name" read NAME echo "Good Evening, $NAME" ============ 02 : Shell Script ============= #! /bin/bash echo "Enter your first name" read FNAME echo "Enter your last name" read LNAME echo "Your Fullname : $FNAME $LNAME" =========== Variables =========== => Variables are used to store the values => Variables will represent data in key-value format a=10 b=20 name=ashok gender=male age=20 Note: We don't have data types in shell scripting. => We have 2 types of variables 1) System Variables / Environment Variable 2) User Defined Variables => The variables which are already defined and using by our system are called as System variables. $ echo $SHELL $ echo $USER $ echo $PATH Note: We can access all the environment variables using below command $ env => The variables which we are creating based on our requirement are called as 'User Defined Variables'. name = ashok id = 101 age = 25 gender = male Note : To access value of variable we will use below syntax echo $VARIABLE_NAME # create variable using terminal export course=devops # get variable value echo $course # remove variable unset variable_name Note: If we use export command in terminal for setting variables then those variables will be removed once we close our terminal. These are called as temporary variables. ==================================== How to set variables permanently ? ==================================== => We will use .bashrc file to set variables permanently for the user. => In user home directory, .bashrc file will be available (it is hidden file). $ ls -la $ cat .bashrc # open .bashrc file vi .bashrc # add variables at end of the file COURSE=devops TRAINER=ashok # apply .bashrc changes source .bashrc # Access variables echo $COURSE echo $TRAINER Note: In linux machine, every user will contain their own .bashrc file. ================================================ How to set variables for all users in linux ? ================================================= $ cat /etc/profile Note: If we add variables in /etc/profile then those variables applicable for all users in linux vm. ========================== Rules for Variables name ========================== => Variable name should not start with digit => Variable name should not contain below 3 special symbols Ex : - (hypen), @, # Note: It is recommended to use uppercase characters for variable names. name ==> NAME age ==> AGE ============ Operators ============ => Operators are used to perform some operation on the variables. 10 + 20 => 30 10 > 20 => false 20 == 20 => true ======================== Arithematic Operators ======================== Addition : + Substraction : - Multiplication : * Division : / Modulas : % Syntax to perform Arithematic Operations : $((FNUM+SNUM)) ================== 03 : Script (addition) ================ #! /bin/bash echo "Enter first number" read FNUM echo "Enter second number" read SNUM echo "Result : $((FNUM+SNUM))" =================================== Relational/Comparision Operators =================================== Equal : == or eq Not Equal : != Greater than : > or gt or ge less than : < or lt or le ======================== Conditional Statements ======================== => Conditional statements are used to execute commands based on condition. Ex : read user age if age is above 18 years then print eligible for vote if age is below 18 years then print not-elgible for vote => To implement conditional stmts we will use "if-elif-else" concept. Syntax: if [ conditon-1 ]; then // stmt-1 elif [ conditio-2 ]; then // stmt-2 else // stmt-3 fi ============== 04 : Script (if-else) ================= #! /bin/bash echo "Enter Your age" read AGE if [ $AGE -ge 18 ]; then echo "Eligible for vote" else echo "Not Eligible for vote" fi ================================================================================== Requirement : Take a number from user and check weather it is positive or negative or zero ========================= 05 - Script ======================================= #! /bin/bash echo "Enter Number" read A if [ $A -gt 0 ];then echo "It is +ve num" elif [ $A -lt 0 ];then echo "It is -ve num" else echo "It is zero" fi ============================================================================== Requirement : Take a number from user and check given number is even or odd ============================================================================== ################################################################################## Date : 23-July-2024 Topic : Shell Scripting ################################################################################## ------------------- Looping Statements ------------------- => Loops are used to execute statements multiple times. => In scripting we can use 2 types of loops 1) Range Based Loop (ex: for) 2) Conditional Based Loop (ex: while) --------- for loop ---------- for(( initialization; condition; modification )) do //stmts done ================================================ For loop example - Print Numbers from 1 to 10 ================================================ #! /bin/bash for((i=1; i<=10; i++)) do echo $i done ================================================ For loop example - Print Numbers from 10 to 1 ================================================ #! /bin/bash for((i=10; i>=1; i--)) do echo $i done ========================================================================== Requiremnt: Write shell script to print even numbers in between 1 to 20. ========================================================================== #! /bin/bash for(( i=1; i<=20; i++ )) do if(( i%2 == 0)); then echo $i fi done ============= While Loop ============= => While loop is used to execute statements until condition is true syntax: while [ condition ] do // stms done ------------------------------------------ print nums from 1 to 10 using while loop ------------------------------------------ #! /bin/bash N=1 while [ $N -le 10 ] do echo $N let N++ done ============================ Print Numbers from 10 to 1 ============================ #! /bin/bash N=10 while [ $N -gt 0 ] do echo $N let N-- done ====================== Functions / Methods ====================== => Functions are used to perform some action / task. => Using functions we can divide big task into multiple small tasks. => Using functions we can divide our work logically => Functions are re-usable ------- syntax ------- # create function function funName(){ // stmts (body) } # call function for execution funName ====================== shell script with Function =============== #! /bin/bash function welcome(){ echo "welcome to ashokit" echo "welcome to devops" echo "welcome to aws" } welcome ------------------------------------------------- ======================== Command Line Arguments ======================== => cmd args are used to supply values to script file at the time of script execution sh task.sh 10 20 ashokit devops => We can read cmd args in script like below $# => to get total no.of cmd args we passed $1 => Read first cmd arg $2 => Read second cmd arg $3 => Read third cmd arg $* => Read all cmd args ------------------------------------- #! /bin/bash echo "Total Args : $#" echo "First Arg : $1" echo "Second Arg: $2" echo "=================" echo "All args : $*" ============================================================================= Requirement: Write shell script to perform sum of two numbers using cmd args ============================================================================= #! /bin/bash echo "Result : $(($1+$2))" =============== Assignments =============== 1) Write shell script to check given number is prime number or not 2) Write shell script to check given string is palindrome or not Ex: liril, madam, ashok 3) Write shell scritp to print table of given number (Ex: 2) 2 * 1 = 2 2 * 2 = 4 .. 2 * 10 = 20 4) Write a shell script to take backup of /home/ec2-user directory ==================== What is Scheduling ==================== shell script file : system-health-check.sh Requriement :: Everyday @9:00 AM we have to run above shell script file. => Instead of running that file manually, we can use scheduling. => Scheduling means configuring the tasks to be executed automatically. => In linux, we will use CRON to schedule jobs/scripts execution. => CRON is an utility in linux to schedule jobs execution. => In real-time we will use several jobs on daily/weekly/monthly/yearly basis to automate our work. - Delete temp files - Take backup of files - System health checks ================ CRON JOB Syntax ================ Syntax: * * * * * => First * will represent minutes (0 - 59) => Second * will represent hour ( 0 - 23 ) => Third * will represent day of month ( 1 - 31 ) => Fourth * will represent month of year ( 1 - 12 ) => Fifth * will represent day of week ( 0 - 6 / sun - sat) ================== What is CROND ? ================== => In linux machines, CROND is a deamon process (background process). => Every minute, CROND will be checking for CRON Jobs Schedule for the execution. ====================== Sample CRON Schedules ====================== # Run for every 15 mins */15 * * * * backup.sh # Run everday @5:00 AM 0 5 * * * backup.ash # Run everyday @5:00 PM 0 17 * * * backup.sh # Run every month on first day @9:00 AM 0 9 1 * * backup.sh # Run job everyday @4:15 PM Monday - Friday 15 16 * * 1-5 backup.sh Note: We can write cron expression using below website URL : https://crontab.guru/ ====================================== Where to configure cronjob in linux ? ====================================== -> crontab file is used to configure cronjobs in linux # open crontab file crontab -e # display cronjobs schedules crontab -l # remove crontab file crontab -r ==================== CRONJOB Practicals ==================== 1) Launch Linux machine with UBUNTU AMI 2) Connect with Linux VM using SSH client 3) Create shell script file and keep below content $ vi task.sh touch /home/ubuntu/f1.txt touch /home/ubuntu/f2.txt 4) Provide execute permission for script file $ chmod +x task.sh 5) Open crontab file and configure job schedule $ crontab -e Note: Add below job schedule info */1 * * * * /bin/bash /home/ubuntu/task.sh 6) Save and close the crontab file (ctrl + x + y + enter) 7) After 1 minute check files got created or not. $ ls -l 8) To remove crontab file we can use below command $crontab -r ========= Summary ========= 1) Linux Architecture 2) What is shell 3) What is kernel 4) What is shell scripting & why ? 5) Proramming vs Scripting 6) Sha-bang 7) Variables (env & user-defined) 8) .bashrc file 9) cmd arguments 11) Operators 12) Conditional Stmts (if-elif-else) 13) Looping stmts (for, while) 14) functions 15) Cronjobs