diff --git a/README.md b/README.md index d8a3e5b..ed8e2ad 100644 --- a/README.md +++ b/README.md @@ -62,8 +62,8 @@ Provides information about a certain stock symbol - -  Written by: Jake Meyer + +  Written by: Jake Meyer ## Currency @@ -115,6 +115,19 @@ Quick search that grabs relevant information about a movie + +## Cheat + + +The fastest way to find {command options|code pieces} you need + +
+ + + +
+ + ## Taste Recommendation engine that provides three similar items like the supplied item @@ -148,10 +161,11 @@ Gets the link that is being masked by a url shortner * To get location based on ip address:
ipinfo.io * To get and print weather based on a location: wttr.in * To grab the stock information in JSON format: alphavantage.co -* To grab the latest exchange rate between currencies: api.fixer.io +* To grab the latest exchange rate between currencies: fixer.io * To grab information on movies: omdbapi.com * To grab recommendations based on an item: tastedive.com * To determine masked link behind url shortner: x.datasig.io +* To grab cheatsheets for commands and languages: cheat.sh #### Inspired by: Ruby-Scripts ## Installing diff --git a/changelog.md b/changelog.md index eb3d25c..532ea1f 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,15 @@ # Bash-Snippets Changelog +## Version 1.7.0 + + + +### Changes +* Added cheat component + +
+ ## Version 1.6.0
diff --git a/cheat/cheat b/cheat/cheat new file mode 100755 index 0000000..dd5c320 --- /dev/null +++ b/cheat/cheat @@ -0,0 +1,226 @@ +#!/bin/bash +# Author: Alexander Epstein https://github.com/alexanderepstein + +currentVersion="1.6.0" +configuredClient="" +search="0" +insensitive="" +recursive="" +boundry="" + +## 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 + +} + +usage() +{ + echo "Cheat tool" + echo "Usage: cheat [flags] [command] or cheat [flags] [programming language] [subject]" + echo " -s Does a search for last argument rather than looking for exact match" + echo " -i Case insensitive search" + echo " -b Word boundaries in search" + echo " -r Recursive search" + echo " -u Update Bash-Snippet Tools" + echo " -h Show the help" + echo " -v Get the tool version" + echo "Special Pages:" + echo " hello Describes building the hello world program written in the language" + echo " list This lists all cheatsheets related to previous arg if none it lists all cheatsheets" + echo " learn Shows a learn-x-in-minutes language cheat sheet perfect for getting started with the language" + echo " 1line A collection of one-liners in this language" + echo " weirdness A collection of examples of weird things in this language" +} + +getCheatSheet() +{ + if [[ $# == 1 ]]; then + if [[ $search == "1" ]];then + link=cheat.sh/~$1 + else + link=cheat.sh/$1 + fi + else + link=cheat.sh/$1 + fi + + if [[ $# == 2 ]];then + if [[ $search == "1" ]];then + link+=/~$2 + else + link+=/$2 + fi + fi + + if [[ $insensitive != "" || $recursive != "" || $boundry != "" ]];then link+=/$boundry$insensitive$recursive; fi + + httpGet $link +} + +checkSpecialPage() +{ + temp=$1 + if [[ $1 == "list" ]];then + temp=":list" + elif [[ $1 == "learn" ]];then + temp=":list" + elif [[ $1 == "styles" ]];then + temp=":styles" + fi + if [[ $2 == "1" ]];then + arg1=$temp + else + arg2=$temp + fi +} + +getConfiguredClient || exit 1 +checkInternet || exit 1 + +while getopts "ribuvhis" opt; do + case $opt in + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + h) + usage + exit 0 + ;; + v) + echo "Version $currentVersion" + exit 0 + ;; + u) + update + exit 0 + ;; + i) + insensitive="i" + search="1" + ;; + b) + boundry="b" + search="1" + ;; + r) + recursive="r" + search="1" + ;; + s) + search="1" + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac +done + +for arg +do + if [[ $arg != "-r" && $arg != "-s" && $arg != "-b" && $arg != "-i" ]];then + if [ -z ${arg1+x} ];then + arg1=$arg + fi + if [ ! -z ${arg1+x} ];then + arg2=$arg + fi + fi +done + +checkSpecialPage $arg1 1 +checkSpecialPage $arg2 2 + +if [[ $# == 0 ]]; then + usage + exit 0 +elif [[ $1 == "update" ]];then + update + exit 0 +elif [[ $1 == "help" ]];then + usage + exit 0 +else + if [[ $arg1 != $arg2 ]];then + getCheatSheet $arg1 $arg2 + else + getCheatSheet $arg1 + fi + exit 0 + +fi diff --git a/cheat/cheat.png b/cheat/cheat.png new file mode 100644 index 0000000..f0ab885 Binary files /dev/null and b/cheat/cheat.png differ diff --git a/cheat/install.sh b/cheat/install.sh new file mode 100755 index 0000000..dadc569 --- /dev/null +++ b/cheat/install.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# Author: Alexander Epstein https://github.com/alexanderepstein +echo -n "Installing cheat: " +chmod a+x cheat +cp cheat /usr/local/bin > /dev/null 2>&1 || { echo "Failure"; echo "Error copying file, try running install script as sudo"; exit 1; } +echo "Success" diff --git a/cheat/uninstall.sh b/cheat/uninstall.sh new file mode 100755 index 0000000..33958ab --- /dev/null +++ b/cheat/uninstall.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Author: Alexander Epstein https://github.com/alexanderepstein +echo -n "Removing cheat: " +rm -f /usr/local/bin/cheat > /dev/null 2>&1 || { echo "Failed" ; echo "Error removing file, try running uninstall script as sudo"; exit 1; } +echo "Success" diff --git a/install.sh b/install.sh index ae40808..e74b5cb 100755 --- a/install.sh +++ b/install.sh @@ -78,6 +78,15 @@ if [[ $# == 0 ]]; then cd .. || exit 1 fi + unset answer + echo -n "Do you wish to install cheat [Y/n]: " + read -r answer + if [[ "$answer" == "Y" || "$answer" == "y" ]] ;then + cd cheat || exit 1 + ./install.sh + cd .. || exit 1 + fi + fi @@ -113,6 +122,10 @@ elif [[ $1 == "geo" ]]; then cd geo || exit 1 ./install.sh || exit 1 cd .. || exit 1 +elif [[ $1 == "cheat" ]]; then + cd cheat || exit 1 + ./install.sh || exit 1 + cd .. || exit 1 elif [[ $1 == "all" ]];then cd currency || exit 1 ./install.sh || exit 1 @@ -138,6 +151,9 @@ elif [[ $1 == "all" ]];then cd geo || exit 1 ./install.sh || exit 1 cd .. || exit 1 + cd cheat || exit 1 + ./install.sh || exit 1 + cd .. || exit 1 elif [[ $1 == "update" ]]; then echo "Updating scripts..." if [[ -f /usr/local/bin/currency ]];then @@ -180,6 +196,11 @@ elif [[ $1 == "update" ]]; then ./install.sh || exit 1 cd .. || exit 1 fi + if [[ -f /usr/local/bin/cheat ]];then + cd cheat || exit 1 + ./install.sh || exit 1 + cd .. || exit 1 + fi fi echo "Bash Snippets version $currentVersion" diff --git a/uninstall.sh b/uninstall.sh index 3b7d77d..6bb4a74 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -87,3 +87,13 @@ if [[ -f /usr/local/bin/geo ]];then cd .. || exit 1 fi fi + +if [[ -f /usr/local/bin/cheat ]];then + echo -n "Do you wish to uninstall cheat [Y/n]: " + read -r answer + if [[ "$answer" == "Y" || "$answer" == "y" ]] ;then + cd cheat || exit 1 + ./uninstall.sh + cd .. || exit 1 + fi +fi