mirror of
https://github.com/alexanderepstein/Bash-Snippets
synced 2018-11-08 02:59:35 +01:00
ab4e652d61
Adding section for tools that didnt make it to the main pipeline for reasons but are still functional and useful.
265 lines
8.5 KiB
Bash
Executable File
265 lines
8.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Author: Alexander Epstein https://github.com/alexanderepstein
|
|
|
|
currentVersion="1.11.0"
|
|
configuredClient=""
|
|
directionsFlag="0"
|
|
directionsMapFlag="0"
|
|
staticMapFlag="0"
|
|
source ~/.bash_profile ## allows grabbing enviornment variable
|
|
MAPQUEST_API_KEY=$MAPQUEST_API_KEY
|
|
if [ -d ~/temp ];then rm -rf ~/temp;fi
|
|
## This function determines which http get tool the system has installed and returns an error if there isnt one
|
|
getConfiguredClient()
|
|
{
|
|
if command -v curl &>/dev/null ; then
|
|
configuredClient="curl"
|
|
elif command -v wget &>/dev/null ; then
|
|
configuredClient="wget"
|
|
elif command -v fetch &>/dev/null ; then
|
|
configuredClient="fetch"
|
|
else
|
|
echo "Error: This tool reqires either curl, wget, or fetch to be installed."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
|
|
## Allows to call the users configured client without if statements everywhere
|
|
httpGet()
|
|
{
|
|
case "$configuredClient" in
|
|
curl) curl -A curl -s "$@";;
|
|
wget) wget -qO- "$@";;
|
|
fetch) fetch -o "...";;
|
|
esac
|
|
}
|
|
|
|
|
|
checkInternet()
|
|
{
|
|
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1 # query google with a get request
|
|
if [ $? -eq 0 ]; then #check if the output is 0, if so no errors have occured and we have connected to google successfully
|
|
return 0
|
|
else
|
|
echo "Error: no active internet connection" >&2 #sent to stderr
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
update()
|
|
{
|
|
# Author: Alexander Epstein https://github.com/alexanderepstein
|
|
# Update utility version 1.2.0
|
|
# To test the tool enter in the defualt values that are in the examples for each variable
|
|
repositoryName="Bash-Snippets" #Name of repostiory to be updated ex. Sandman-Lite
|
|
githubUserName="alexanderepstein" #username that hosts the repostiory ex. alexanderepstein
|
|
nameOfInstallFile="install.sh" # change this if the installer file has a different name be sure to include file extension if there is one
|
|
latestVersion=$(httpGet https://api.github.com/repos/$githubUserName/$repositoryName/tags | grep -Eo '"name":.*?[^\\]",'| head -1 | grep -Eo "[0-9.]+" ) #always grabs the tag without the v option
|
|
|
|
if [[ $currentVersion == "" || $repositoryName == "" || $githubUserName == "" || $nameOfInstallFile == "" ]];then
|
|
echo "Error: update utility has not been configured correctly." >&2
|
|
exit 1
|
|
elif [[ $latestVersion == "" ]];then
|
|
echo "Error: no active internet connection" >&2
|
|
exit 1
|
|
else
|
|
if [[ "$latestVersion" != "$currentVersion" ]]; then
|
|
echo "Version $latestVersion available"
|
|
echo -n "Do you wish to update $repositoryName [Y/n]: "
|
|
read -r answer
|
|
if [[ "$answer" == "Y" || "$answer" == "y" ]] ;then
|
|
cd ~ || { echo 'Update Failed' ; exit 1 ; }
|
|
if [[ -d ~/$repositoryName ]]; then rm -r -f $repositoryName || { echo "Permissions Error: try running the update as sudo"; exit 1; } ; fi
|
|
git clone "https://github.com/$githubUserName/$repositoryName" || { echo "Couldn't download latest version" ; exit 1; }
|
|
cd $repositoryName || { echo 'Update Failed' ; exit 1 ;}
|
|
git checkout "v$latestVersion" 2> /dev/null || git checkout "$latestVersion" 2> /dev/null || echo "Couldn't git checkout to stable release, updating to latest commit."
|
|
chmod a+x install.sh #this might be necessary in your case but wasnt in mine.
|
|
./$nameOfInstallFile "update" || exit 1
|
|
cd ..
|
|
rm -r -f $repositoryName || { echo "Permissions Error: update succesfull but cannot delete temp files located at ~/$repositoryName delete this directory with sudo"; exit 1; }
|
|
else
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "$repositoryName is already the latest version"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
getDirections()
|
|
{
|
|
response=$(httpGet "https://www.mapquestapi.com/directions/v2/route?key=$MAPQUEST_API_KEY&from=$1&to=$2&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")
|
|
firstDirection=$(echo $response | grep -Eo "origNarrative\":\"[a-Z -./0-9]*" | grep -Eo "[^origNarrative\":][a-Z -./0-9]*" )
|
|
tempDirections=($(echo $response | grep -Eo "\"narrative\":\"[a-Z -./0-9]*"))
|
|
distances=($(echo $response | grep -Eo "distance\":[0-9]*[.][0-9]*" | grep -Eo "[^distance\":][0-9]*[.][0-9]*" ))
|
|
totalDist=${distances[0]}
|
|
count="0"
|
|
count="-1"
|
|
temp=${tempDirections[0]}
|
|
for direct in "${tempDirections[@]}"
|
|
do
|
|
if [[ $(echo $direct | grep -Eo "narrative" ) == "narrative" ]];then
|
|
count=$(echo $count + 1 | bc )
|
|
directions[$count]=$temp
|
|
temp=$(echo $direct | grep -Eo "[^\"narrative:\"][a-Z 0-9./]*")
|
|
else
|
|
temp="$temp $direct"
|
|
fi
|
|
done
|
|
#for distance in $tempDistances
|
|
directions[0]=$firstDirection
|
|
}
|
|
|
|
getDirectionsMap()
|
|
{
|
|
echo "Generating route map from $unformattedFromLocation to $unformattedToLocation"
|
|
mkdir ~/temp || return 1
|
|
httpGet "https://www.mapquestapi.com/staticmap/v5/map?start=$1&end=$2&size=600,400@2x&key=$MAPQUEST_API_KEY" >> ~/temp/routeImage.png || return 1
|
|
if [[ "$OSTYPE" == "linux"* ]];then
|
|
display ~/temp/routeImage.png > /dev/null || return 1
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
open ~/temp/routeImage.png > /dev/null
|
|
fi
|
|
rm -rf ~/temp > /dev/null
|
|
}
|
|
|
|
printDirections()
|
|
{
|
|
echo
|
|
echo "From $unformattedFromLocation to $unformattedToLocation ($totalDist mi)"
|
|
echo "==================================================="
|
|
count=0
|
|
for direct in "${directions[@]}"
|
|
do
|
|
if [ $count -ne 0 ];then echo -n "$(echo $count | bc)). ";fi
|
|
if [[ $direct != "" ]];then # sometimes original Narrative is blank
|
|
direct="$direct (${distances[$(echo $count + 1 | bc)]} mi)"
|
|
if [ $count -ne 0 ];then echo $direct;fi
|
|
count=$(echo $count + 1 | bc )
|
|
fi
|
|
done
|
|
echo "Welcome to $unformattedToLocation"
|
|
echo "==================================================="
|
|
echo
|
|
}
|
|
|
|
getLocations()
|
|
{
|
|
echo -n "Enter your starting location: "
|
|
read fromLocation
|
|
echo -n "Enter your destination: "
|
|
read toLocation
|
|
unformattedFromLocation=$fromLocation
|
|
unformattedToLocation=$toLocation
|
|
fromLocation=$(echo $fromLocation | sed s/','/"+"/g | sed s/' '/"+"/g )
|
|
toLocation=$(echo $toLocation | sed s/','/"+"/g | sed s/' '/"+"/g )
|
|
}
|
|
|
|
checkImagemagick()
|
|
{
|
|
if [[ "$OSTYPE" == "linux"* ]];then
|
|
if ! command -v display &>/dev/null ;then
|
|
echo "Error: you need to install imagemagick to use map features." &>2
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
else
|
|
return 0
|
|
fi
|
|
|
|
}
|
|
|
|
getMapLocation()
|
|
{
|
|
echo -n "Enter the city or address you want to generate a map for: "
|
|
read mapLocation
|
|
echo "Generating static map for $mapLocation"
|
|
mapLocation==$(echo $mapLocation | sed s/','/"+"/g | sed s/' '/"+"/g )
|
|
}
|
|
|
|
getStaticMap()
|
|
{
|
|
mkdir ~/temp || return 1
|
|
httpGet "https://www.mapquestapi.com/staticmap/v5/map?key=$MAPQUEST_API_KEY¢er=$1&zoom=15&type=hyb&size=600,400@2x" >> ~/temp/mapImage.png || return 1
|
|
if [[ "$OSTYPE" == "linux"* ]];then
|
|
display ~/temp/mapImage.png > /dev/null || return 1
|
|
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
open ~/temp/mapImage.png > /dev/null || return 1
|
|
fi
|
|
rm -rf ~/temp > /dev/null || return 1
|
|
}
|
|
|
|
getConfiguredClient || exit 1
|
|
checkInternet || exit 1
|
|
## getDirections Denver Boulder || exit 1
|
|
## printDirections Denver Boulder || exit 1
|
|
## getDirectionsMap Denver Boulder || exit 1
|
|
## getStaticMap Paramus || exit 1
|
|
|
|
|
|
while getopts "drmuvh" opt; do
|
|
case $opt in
|
|
\?)
|
|
echo "Invalid option: -$OPTARG" >&2
|
|
exit 1
|
|
;;
|
|
h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
d)
|
|
directionsFlag="1"
|
|
;;
|
|
m)
|
|
staticMapFlag="1"
|
|
;;
|
|
r)
|
|
directionsMapFlag="1"
|
|
;;
|
|
v)
|
|
echo "Version $currentVersion"
|
|
exit 0
|
|
;;
|
|
u)
|
|
update
|
|
exit 0
|
|
;;
|
|
:)
|
|
echo "Option -$OPTARG requires an argument." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $# == 0 ]]; then
|
|
usage
|
|
exit 0
|
|
elif [[ $# == "1" ]]; then
|
|
if [[ $1 == "update" ]];then
|
|
update
|
|
exit 0
|
|
elif [[ $1 == "help" ]]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
if [[ $directionsFlag == "0" && $staticMapFlag == "1" ]];then
|
|
checkImagemagick || exit 1
|
|
getMapLocation || exit 1
|
|
getStaticMap $mapLocation || exit 1
|
|
elif [[ $directionsFlag == "1" ]];then
|
|
getLocations || exit 1
|
|
getDirections $fromLocation $toLocation || exit 1
|
|
printDirections $fromLocation $toLocation || exit 1
|
|
checkImagemagick || exit 1
|
|
if [[ $directionsMapFlag == "1" ]];then getDirectionsMap $fromLocation $toLocation || exit 1;fi
|
|
if [[ $staticMapFlag = "1" ]];then
|
|
echo "Generating static map for $unformattedFromLocation" && getStaticMap $fromLocation || exit 1
|
|
echo "Generating static map for $unformattedToLocation" && getStaticMap $toLocation || exit 1
|
|
fi
|
|
fi
|