Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux_wiki:use_shell_scripting_to_automate_system_maintenance_tasks [2016/09/21 23:03] billdozor |
linux_wiki:use_shell_scripting_to_automate_system_maintenance_tasks [2019/05/25 23:50] (current) |
||
---|---|---|---|
Line 4: | Line 4: | ||
Review of common shell scripting syntax. | 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 | ||
---- | ---- | ||
Line 119: | Line 139: | ||
done | done | ||
</ | </ | ||
+ | |||
+ | ===== While Loops ===== | ||
+ | |||
+ | While loops are useful for monitoring something or to repeat something forever and break under certain conditions. | ||
+ | |||
+ | \\ | ||
+ | Loop infinitely | ||
+ | <code bash> | ||
+ | # 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 | ||
+ | <code bash> | ||
+ | # 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." | ||
+ | </ | ||
+ | |||
+ | ===== Case Evaluation ===== | ||
+ | |||
+ | Evaluate data and provide matches for expected values. | ||
+ | |||
+ | <code bash> | ||
+ | case $1 in | ||
+ | start) | ||
+ | start_program | ||
+ | ;; | ||
+ | stop) | ||
+ | stop_program | ||
+ | ;; | ||
+ | status) | ||
+ | status_of_program | ||
+ | ;; | ||
+ | *) | ||
+ | echo " | ||
+ | ;; | ||
+ | esac | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Debugging ====== | ||
+ | |||
+ | To debug a script, execute it with a special argument: | ||
+ | <code bash> | ||
+ | bash -x myscript.sh | ||
+ | </ | ||
+ | * -x -> Shows line by line what the script is doing, which allows easier debugging when it breaks | ||
---- | ---- | ||