notify_by_pushover.sh
#!/bin/bash

#	Notify by Pushover
#	by Jedda Wignall
#	http://jedda.me

#	v1.2.1 - 17 Mar 2013
#	Now parses title and message for sound processing.

#	v1.2 - 18 Dec 2012
#	Added parsing of title for specific warning, critical, and OK sounds.

#	v1.1 - 02 Dec 2012
#	Added notification sounds.

#	v1.0 - 21 Aug 2012
#	Initial release.

#	This script sends a Pushover (http://pushover.net/) notification to your account. I use it in a Nagios setup
#	to send network monitoring notifications, but it could be used or adapted for nearly any scenario.

#	IMPORTANT
#	You will need to create a Pushover 'Application' for this script in your account, and use the provided API key
#	as an argument. You can register an app once logged into Pushover at the follwing link:
#	https://pushover.net/apps/build

# 	Takes the following REQUIRED arguments:

# 	-u		Your Pushover user key.
# 	-a		Your Pushover application key.
# 	-t		The notification title.
# 	-m		The notification body.

# 	and the following OPTIONAL arguments:

# 	-p		Notification priority. Set to 1 to ignore quiet times.
# 	-s		Notification sound. You must use one of the parameters listed at https://pushover.net/api#sounds.
#	-w		Warning notification sound. The script will look for the text 'WARNING' in the notification title, and use this sound if found.
#	-c		Critical notification sound. The script will look for the text 'CRITICAL' in the notification title, and use this sound if found.
#	-o		OK notification sound. The script will look for the text 'OK' in the notification title, and use this sound if found.

# 	Example:
#	./notify_by_pushover.sh -u r5j7mjYjd -a noZ9KuR5T -s 'spacealarm' -t "server.pretendco.com" -m "DISK WARNING - free space: /dev/disk0s2 4784 MB"


while getopts "u:a:t:m:p:s:w:c:o:" optionName; do
case "$optionName" in
u) userKey=( "$OPTARG" );;
a) appToken=( "$OPTARG" );;
t) title=( "$OPTARG" );;
m) message=( "$OPTARG" );;
p) priority=( "$OPTARG" );;
s) sound=( "$OPTARG" );;
w) warnSound=( "$OPTARG" );;
c) critSound=( "$OPTARG" );;
o) okSound=( "$OPTARG" );;

esac
done

if [ "$priority" != "" ]; then
	priorityString="priority=$priority"
else
	priorityString="priority=0"
fi

if echo $title $message | grep -q 'WARNING' && [ "$warnSound" != "" ] ;then
    sound=$warnSound
elif echo $title $message | grep -q 'CRITICAL' && [ "$critSound" != "" ] ;then
	sound=$critSound
elif echo $title $message | grep -q 'OK' && [ "$okSound" != "" ] ;then
	sound=$okSound
fi

curl -F "token=$appToken" \
-F "user=$userKey" \
-F "title=$title" \
-F "message=$message" \
-F "sound=$sound" \
-F "$priorityString" \
https://api.pushover.net/1/messages

exit 0