linux_wiki:use_shell_scripting_to_automate_system_maintenance_tasks

Use Shell Scripting To Automate System Maintenance Tasks

General Information

Review of common shell scripting syntax.


Lab Setup

The following virtual machines will be used:

  • server1.example.com (192.168.1.150) → Create and test some scripts

Help

Finding help in this section.

  • Not many references. Be comfortable with basic bash scripting
    • Variables
    • Arguments
    • Input
    • Output
    • Decisions (if statements, case)
    • Loops

General Layout

General bash script layout

#!/bin/bash
 
echo "Hello world"
exit 0

Arguments

Sending and parsing arguments to scripts.

#!/bin/bash
 
echo "The first argument is: $1"
echo "The second argument is: $2"
 
echo "There are $# total arguments."
echo "All of the arguments are: $@"
 
# Loop through arguments one at a time
for myarg in $@; do
  echo "Argument is: $myarg"
done

Getting User Input

User input with the read command

#!/bin/bash
 
# If there is no argument passed, prompt for input
if [ -z $1 ]; then
  echo "Enter something: "
  read myname
else
  # There is an argument, use that
  myname=$1
fi
 
echo "You entered: $myname"
exit 0

Conditionals

If/else conditional testing

if [ -f $1 ]; then
  echo "Argument is a file"
elif [ -d $1 ]; then
  echo "Argument is a directory"
else
  echo "Argument is something else..."
fi
 
exit 0


Logical operators

# Logical AND: If first command is true, execute second command
[ -f $1 ] && echo "This is a file"
 
# Logical OR: If first command is true, do not execute second command
[ -f $1 ] || echo "This is not a file"

Loops

Iterating through data.

Useful for processing ranges of information.

Specific amount of iterations

for (( count=1; count <= 100; count++ )); do
  echo "The count is: $count"
done
 
exit 0


Unknown iterations through a range of data

for node in $(cat system_list.txt); do
  ssh $node "uptime"
done


Range of numbers

for number in {100..200}; do
  ping -c 1 192.168.1.$number > /dev/null && echo "192.168.1.$number is up"
done

While loops are useful for monitoring something or to repeat something forever and break under certain conditions.


Loop infinitely

# Keep checking to see if a specific host is up (the first argument to the script)
while true; do
  ping -c 1 $1
 
  # if the last command (ping) returns successful (0 exit code)
  if [[ $? -eq 0 ]]; then
    echo "$1 is up"
    exit 0
  else
    sleep 5
  fi
 
done


Monitor a process

# While output results are true, go back to sleep
while ps aux | grep $1 | grep -v grep; do
  sleep 5
done
 
# Mail when no results from ps (process stopped)
echo "The process($1) is no longer running." | mail -s "Process $1 stopped" root

Evaluate data and provide matches for expected values.

case $1 in
  start)
    start_program
  ;;
  stop)
    stop_program
  ;;
  status)
    status_of_program
  ;;
  *)
    echo "Usage: $0 (start|stop|status)"
  ;;
esac

Debugging

To debug a script, execute it with a special argument:

bash -x myscript.sh
  • -x → Shows line by line what the script is doing, which allows easier debugging when it breaks

  • linux_wiki/use_shell_scripting_to_automate_system_maintenance_tasks.txt
  • Last modified: 2019/05/25 23:50
  • (external edit)