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
 |