linux_wiki:use_shell_scripting_to_automate_system_maintenance_tasks

This is an old revision of the document!


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

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.1475963501.txt.gz
  • Last modified: 2019/05/25 23:50
  • (external edit)