178 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/bash
 | |
| # Original Author: Alexander Epstein https://github.com/alexanderepstein
 | |
| 
 | |
| currentVersion="1.10.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
 | |
| }
 | |
| 
 | |
| 
 | |
| 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 "  -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
 | |
|     ;;
 | |
|     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 == "help" || $1 == ":help" ]];then
 | |
|   usage
 | |
|   exit 0
 | |
| else
 | |
|   if [[ $arg1 != $arg2 ]];then
 | |
|     getCheatSheet $arg1 $arg2
 | |
|   else
 | |
|     getCheatSheet $arg1
 | |
|   fi
 | |
|   exit 0
 | |
| 
 | |
| fi
 |