parent
fc2ea10d47
commit
c02e14dcfc
1 changed files with 760 additions and 0 deletions
@ -0,0 +1,760 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
# ################################################## |
||||
# Bash scripting Utilities. |
||||
# |
||||
# This script sources my collection of scripting utilities making |
||||
# it possible to source this one script and gain access to a |
||||
# complete collection of functions, variables, and other options. |
||||
# |
||||
# Initially taken from here: https://github.com/natelandau/shell-scripts/blob/master/lib/utils.sh |
||||
# |
||||
# ################################################## |
||||
|
||||
# Logging and Colors |
||||
# ------------------------------------------------------ |
||||
# Here we set the colors for our script feedback. |
||||
# Example usage: success "sometext" |
||||
#------------------------------------------------------ |
||||
|
||||
# Set Colors |
||||
bold=$(tput bold) |
||||
underline=$(tput sgr 0 1) |
||||
reset=$(tput sgr0) |
||||
purple=$(tput setaf 171) |
||||
red=$(tput setaf 1) |
||||
green=$(tput setaf 76) |
||||
tan=$(tput setaf 3) |
||||
blue=$(tput setaf 38) |
||||
|
||||
function _alert() { |
||||
if [ "${1}" = "emergency" ]; then |
||||
local color="${bold}${red}" |
||||
fi |
||||
if [ "${1}" = "error" ]; then local color="${bold}${red}"; fi |
||||
if [ "${1}" = "warning" ]; then local color="${red}"; fi |
||||
if [ "${1}" = "success" ]; then local color="${green}"; fi |
||||
if [ "${1}" = "debug" ]; then local color="${purple}"; fi |
||||
if [ "${1}" = "header" ]; then local color="${bold}""${tan}"; fi |
||||
if [ "${1}" = "input" ]; then local color="${bold}"; printLog="false"; fi |
||||
if [ "${1}" = "info" ] || [ "${1}" = "notice" ]; then local color=""; fi |
||||
# Don't use colors on pipes or non-recognized terminals |
||||
if [[ "${TERM}" != "xterm"* ]] || [ -t 1 ]; then color=""; reset=""; fi |
||||
|
||||
# Print to $logFile |
||||
if [[ ${printLog} = "true" ]] || [ "${printLog}" == "1" ]; then |
||||
echo -e "$(date +"%m-%d-%Y %r") $(printf "[%9s]" "${1}") ${_message}" >> "${logFile}"; |
||||
fi |
||||
|
||||
# Print to console when script is not 'quiet' |
||||
if [[ "${quiet}" = "true" ]] || [ "${quiet}" == "1" ]; then |
||||
return |
||||
else |
||||
echo -e "$(date +"%r") ${color}$(printf "[%9s]" "${1}") ${_message}${reset}"; |
||||
fi |
||||
|
||||
} |
||||
|
||||
function die () { local _message="${*} Exiting."; echo "$(_alert emergency)"; safeExit;} |
||||
function error () { local _message="${*}"; echo "$(_alert error)"; } |
||||
function warning () { local _message="${*}"; echo "$(_alert warning)"; } |
||||
function notice () { local _message="${*}"; echo "$(_alert notice)"; } |
||||
function info () { local _message="${*}"; echo "$(_alert info)"; } |
||||
function debug () { local _message="${*}"; echo "$(_alert debug)"; } |
||||
function success () { local _message="${*}"; echo "$(_alert success)"; } |
||||
function input() { local _message="${*}"; echo -n "$(_alert input)"; } |
||||
function header() { local _message="========== ${*} ========== "; echo "$(_alert header)"; } |
||||
|
||||
# Log messages when verbose is set to "true" |
||||
verbose() { |
||||
if [[ "${verbose}" = "true" ]] || [ "${verbose}" == "1" ]; then |
||||
debug "$@" |
||||
fi |
||||
} |
||||
|
||||
|
||||
# SCRIPTNAME |
||||
# ------------------------------------------------------ |
||||
# Will return the name of the script being run |
||||
# ------------------------------------------------------ |
||||
scriptName=`basename $0` #Set Script Name variable |
||||
scriptBasename="$(basename ${scriptName} .sh)" # Strips '.sh' from scriptName |
||||
|
||||
# TIMESTAMPS |
||||
# ------------------------------------------------------ |
||||
# Prints the current date and time in a variety of formats: |
||||
# |
||||
# ------------------------------------------------------ |
||||
now=$(LC_ALL=C date +"%m-%d-%Y %r") # Returns: 06-14-2015 10:34:40 PM |
||||
datestamp=$(LC_ALL=C date +%Y-%m-%d) # Returns: 2015-06-14 |
||||
hourstamp=$(LC_ALL=C date +%r) # Returns: 10:34:40 PM |
||||
timestamp=$(LC_ALL=C date +%Y%m%d_%H%M%S) # Returns: 20150614_223440 |
||||
today=$(LC_ALL=C date +"%m-%d-%Y") # Returns: 06-14-2015 |
||||
longdate=$(LC_ALL=C date +"%a, %d %b %Y %H:%M:%S %z") # Returns: Sun, 10 Jan 2016 20:47:53 -0500 |
||||
gmtdate=$(LC_ALL=C date -u -R | sed 's/\+0000/GMT/') # Returns: Wed, 13 Jan 2016 15:55:29 GMT |
||||
|
||||
# THISHOST |
||||
# ------------------------------------------------------ |
||||
# Will print the current hostname of the computer the script |
||||
# is being run on. |
||||
# ------------------------------------------------------ |
||||
thisHost=$(hostname) |
||||
|
||||
# ------------------------------------------------------ |
||||
# These functions are for use with different trap scenarios |
||||
# ------------------------------------------------------ |
||||
|
||||
# Non destructive exit for when script exits naturally. |
||||
# Usage: Add this function at the end of every script |
||||
function safeExit() { |
||||
# Delete temp files, if any |
||||
if is_dir "${tmpDir}"; then |
||||
rm -r "${tmpDir}" |
||||
fi |
||||
trap - INT TERM EXIT |
||||
exit |
||||
} |
||||
|
||||
# readFile |
||||
# ------------------------------------------------------ |
||||
# Function to read a line from a file. |
||||
# |
||||
# Most often used to read the config files saved in my etc directory. |
||||
# Outputs each line in a variable named $result |
||||
# ------------------------------------------------------ |
||||
function readFile() { |
||||
unset "${result}" |
||||
while read result |
||||
do |
||||
echo "${result}" |
||||
done < "$1" |
||||
} |
||||
|
||||
# Escape a string |
||||
# ------------------------------------------------------ |
||||
# usage: var=$(escape "String") |
||||
# ------------------------------------------------------ |
||||
escape() { echo "${@}" | sed 's/[]\.|$(){}?+*^]/\\&/g'; } |
||||
|
||||
# needSudo |
||||
# ------------------------------------------------------ |
||||
# If a script needs sudo access, call this function which |
||||
# requests sudo access and then keeps it alive. |
||||
# ------------------------------------------------------ |
||||
function needSudo() { |
||||
# Update existing sudo time stamp if set, otherwise do nothing. |
||||
sudo -v |
||||
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & |
||||
} |
||||
|
||||
# convertsecs |
||||
# ------------------------------------------------------ |
||||
# Convert Seconds to human readable time |
||||
# |
||||
# To use this, pass a number (seconds) into the function as this: |
||||
# print "$(convertsecs $TOTALTIME)" |
||||
# |
||||
# To compute the time it takes a script to run use tag the start and end times with |
||||
# STARTTIME=$(date +"%s") |
||||
# ENDTIME=$(date +"%s") |
||||
# TOTALTIME=$(($ENDTIME-$STARTTIME)) |
||||
# ------------------------------------------------------ |
||||
function convertsecs() { |
||||
((h=${1}/3600)) |
||||
((m=(${1}%3600)/60)) |
||||
((s=${1}%60)) |
||||
printf "%02d:%02d:%02d\n" $h $m $s |
||||
} |
||||
|
||||
|
||||
# Join |
||||
# ---------------------------------------------- |
||||
# This function joins items together with a user specified separator |
||||
# Taken whole cloth from: http://stackoverflow.com/questions/1527049/bash-join-elements-of-an-array |
||||
# |
||||
# Usage: |
||||
# join , a "b c" d #a,b c,d |
||||
# join / var local tmp #var/local/tmp |
||||
# join , "${FOO[@]}" #a,b,c |
||||
# ---------------------------------------------- |
||||
function join() { local IFS="${1}"; shift; echo "${*}"; } |
||||
|
||||
# File Checks |
||||
# ------------------------------------------------------ |
||||
# A series of functions which make checks against the filesystem. For |
||||
# use in if/then statements. |
||||
# |
||||
# Usage: |
||||
# if is_file "file"; then |
||||
# ... |
||||
# fi |
||||
# ------------------------------------------------------ |
||||
|
||||
function is_exists() { |
||||
if [[ -e "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_not_exists() { |
||||
if [[ ! -e "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_file() { |
||||
if [[ -f "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_not_file() { |
||||
if [[ ! -f "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_dir() { |
||||
if [[ -d "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_not_dir() { |
||||
if [[ ! -d "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_symlink() { |
||||
if [[ -L "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_not_symlink() { |
||||
if [[ ! -L "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_empty() { |
||||
if [[ -z "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function is_not_empty() { |
||||
if [[ -n "$1" ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
# Test whether a command exists |
||||
# ------------------------------------------------------ |
||||
# Usage: |
||||
# if type_exists 'git'; then |
||||
# some action |
||||
# else |
||||
# some other action |
||||
# fi |
||||
# ------------------------------------------------------ |
||||
|
||||
function type_exists() { |
||||
if [ "$(type -P "$1")" ]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
function type_not_exists() { |
||||
if [ ! "$(type -P "$1")" ]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
# Test which OS the user runs |
||||
# $1 = OS to test |
||||
# Usage: if is_os 'darwin'; then |
||||
|
||||
function is_os() { |
||||
if [[ "${OSTYPE}" == $1* ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
} |
||||
|
||||
|
||||
# SEEKING CONFIRMATION |
||||
# ------------------------------------------------------ |
||||
# Asks questions of a user and then does something with the answer. |
||||
# y/n are the only possible answers. |
||||
# |
||||
# USAGE: |
||||
# seek_confirmation "Ask a question" |
||||
# if is_confirmed; then |
||||
# some action |
||||
# else |
||||
# some other action |
||||
# fi |
||||
# |
||||
# Credt: https://github.com/kevva/dotfiles |
||||
# ------------------------------------------------------ |
||||
|
||||
# Ask the question |
||||
function seek_confirmation() { |
||||
# echo "" |
||||
input "$@" |
||||
if "${force}"; then |
||||
notice "Forcing confirmation with '--force' flag set" |
||||
else |
||||
read -p " (y/n) " -n 1 |
||||
echo "" |
||||
fi |
||||
} |
||||
|
||||
# Test whether the result of an 'ask' is a confirmation |
||||
function is_confirmed() { |
||||
if "${force}"; then |
||||
return 0 |
||||
else |
||||
if [[ "${REPLY}" =~ ^[Yy]$ ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
function is_not_confirmed() { |
||||
if "${force}"; then |
||||
return 1 |
||||
else |
||||
if [[ "${REPLY}" =~ ^[Nn]$ ]]; then |
||||
return 0 |
||||
fi |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
# Skip something |
||||
# ------------------------------------------------------ |
||||
# Offer the user a chance to skip something. |
||||
# Credit: https://github.com/cowboy/dotfiles |
||||
# ------------------------------------------------------ |
||||
function skip() { |
||||
REPLY=noskip |
||||
read -t 5 -n 1 -s -p "${bold}To skip, press ${underline}X${reset}${bold} within 5 seconds.${reset}" |
||||
if [[ "$REPLY" =~ ^[Xx]$ ]]; then |
||||
notice " Skipping!" |
||||
return 0 |
||||
else |
||||
notice " Continuing..." |
||||
return 1 |
||||
fi |
||||
} |
||||
|
||||
# unmountDrive |
||||
# ------------------------------------------------------ |
||||
# If an AFP drive is mounted as part of a script, this |
||||
# will unmount the volume. This will only work on Macs. |
||||
# ------------------------------------------------------ |
||||
function unmountDrive() { |
||||
if [ -d "$1" ]; then |
||||
diskutil unmount "$1" |
||||
fi |
||||
} |
||||
|
||||
# help |
||||
# ------------------------------------------------------ |
||||
# Prints help for a script when invoked from the command |
||||
# line. Typically via '-h'. If additional flags or help |
||||
# text is available in the script they will be printed |
||||
# in the '$usage' variable. |
||||
# ------------------------------------------------------ |
||||
function help () { |
||||
echo "" 1>&2 |
||||
input " $@" 1>&2 |
||||
if [ -n "${usage}" ]; then # print usage information if available |
||||
echo " ${usage}" 1>&2 |
||||
fi |
||||
echo "" 1>&2 |
||||
exit 1 |
||||
} |
||||
|
||||
|
||||
function pauseScript() { |
||||
# A simple function used to pause a script at any point and |
||||
# only continue on user input |
||||
seek_confirmation "Ready to continue?" |
||||
if is_confirmed; then |
||||
info "Continuing" |
||||
else |
||||
warning "Exiting Script." |
||||
safeExit |
||||
fi |
||||
} |
||||
|
||||
function in_array() { |
||||
# Determine if a value is in an array. |
||||
# Usage: if in_array "VALUE" "${ARRAY[@]}"; then ... |
||||
local value="$1"; shift |
||||
for arrayItem in "$@"; do |
||||
[[ "${arrayItem}" == "${value}" ]] && return 0 |
||||
done |
||||
return 1 |
||||
} |
||||
|
||||
# Text Transformations |
||||
# ----------------------------------- |
||||
# Transform text using these functions. |
||||
# Adapted from https://github.com/jmcantrell/bashful |
||||
# ----------------------------------- |
||||
|
||||
lower() { |
||||
# Convert stdin to lowercase. |
||||
# usage: text=$(lower <<<"$1") |
||||
# echo "MAKETHISLOWERCASE" | lower |
||||
tr '[:upper:]' '[:lower:]' |
||||
} |
||||
|
||||
upper() { |
||||
# Convert stdin to uppercase. |
||||
# usage: text=$(upper <<<"$1") |
||||
# echo "MAKETHISUPPERCASE" | upper |
||||
tr '[:lower:]' '[:upper:]' |
||||
} |
||||
|
||||
ltrim() { |
||||
# Removes all leading whitespace (from the left). |
||||
local char=${1:-[:space:]} |
||||
sed "s%^[${char//%/\\%}]*%%" |
||||
} |
||||
|
||||
rtrim() { |
||||
# Removes all trailing whitespace (from the right). |
||||
local char=${1:-[:space:]} |
||||
sed "s%[${char//%/\\%}]*$%%" |
||||
} |
||||
|
||||
trim() { |
||||
# Removes all leading/trailing whitespace |
||||
# Usage examples: |
||||
# echo " foo bar baz " | trim #==> "foo bar baz" |
||||
ltrim "$1" | rtrim "$1" |
||||
} |
||||
|
||||
squeeze() { |
||||
# Removes leading/trailing whitespace and condenses all other consecutive |
||||
# whitespace into a single space. |
||||
# |
||||
# Usage examples: |
||||
# echo " foo bar baz " | squeeze #==> "foo bar baz" |
||||
|
||||
local char=${1:-[[:space:]]} |
||||
sed "s%\(${char//%/\\%}\)\+%\1%g" | trim "$char" |
||||
} |
||||
|
||||
squeeze_lines() { |
||||
# <doc:squeeze_lines> {{{ |
||||
# |
||||
# Removes all leading/trailing blank lines and condenses all other |
||||
# consecutive blank lines into a single blank line. |
||||
# |
||||
# </doc:squeeze_lines> }}} |
||||
|
||||
sed '/^[[:space:]]\+$/s/.*//g' | cat -s | trim_lines |
||||
} |
||||
|
||||
progressBar() { |
||||
# progressBar |
||||
# ----------------------------------- |
||||
# Prints a progress bar within a for/while loop. |
||||
# To use this function you must pass the total number of |
||||
# times the loop will run to the function. |
||||
# |
||||
# usage: |
||||
# for number in $(seq 0 100); do |
||||
# sleep 1 |
||||
# progressBar 100 |
||||
# done |
||||
# ----------------------------------- |
||||
if [[ "${quiet}" = "true" ]] || [ "${quiet}" == "1" ]; then |
||||
return |
||||
fi |
||||
|
||||
local width |
||||
width=30 |
||||
bar_char="#" |
||||
|
||||
# Don't run this function when scripts are running in verbose mode |
||||
if ${verbose}; then return; fi |
||||
|
||||
# Reset the count |
||||
if [ -z "${progressBarProgress}" ]; then |
||||
progressBarProgress=0 |
||||
fi |
||||
|
||||
# Do nothing if the output is not a terminal |
||||
if [ ! -t 1 ]; then |
||||
echo "Output is not a terminal" 1>&2 |
||||
return |
||||
fi |
||||
# Hide the cursor |
||||
tput civis |
||||
trap 'tput cnorm; exit 1' SIGINT |
||||
|
||||
if [ ! "${progressBarProgress}" -eq $(( $1 - 1 )) ]; then |
||||
# Compute the percentage. |
||||
perc=$(( progressBarProgress * 100 / $1 )) |
||||
# Compute the number of blocks to represent the percentage. |
||||
num=$(( progressBarProgress * width / $1 )) |
||||
# Create the progress bar string. |
||||
bar= |
||||
if [ ${num} -gt 0 ]; then |
||||
bar=$(printf "%0.s${bar_char}" $(seq 1 ${num})) |
||||
fi |
||||
# Print the progress bar. |
||||
progressBarLine=$(printf "%s [%-${width}s] (%d%%)" "Running Process" "${bar}" "${perc}") |
||||
echo -en "${progressBarLine}\r" |
||||
progressBarProgress=$(( progressBarProgress + 1 )) |
||||
else |
||||
# Clear the progress bar when complete |
||||
echo -ne "${width}%\033[0K\r" |
||||
unset progressBarProgress |
||||
fi |
||||
|
||||
tput cnorm |
||||
} |
||||
|
||||
htmlDecode() { |
||||
# Decode HTML characters with sed |
||||
# Usage: htmlDecode <string> |
||||
echo "${1}" | sed -f "${SOURCEPATH}/htmlDecode.sed" |
||||
} |
||||
|
||||
htmlEncode() { |
||||
# Encode HTML characters with sed |
||||
# Usage: htmlEncode <string> |
||||
echo "${1}" | sed -f "${SOURCEPATH}/htmlEncode.sed" |
||||
} |
||||
|
||||
urlencode() { |
||||
# URL encoding/decoding from: https://gist.github.com/cdown/1163649 |
||||
# Usage: urlencode <string> |
||||
|
||||
local length="${#1}" |
||||
for (( i = 0; i < length; i++ )); do |
||||
local c="${1:i:1}" |
||||
case $c in |
||||
[a-zA-Z0-9.~_-]) printf "%s" "$c" ;; |
||||
*) printf '%%%02X' "'$c" |
||||
esac |
||||
done |
||||
} |
||||
|
||||
urldecode() { |
||||
# Usage: urldecode <string> |
||||
|
||||
local url_encoded="${1//+/ }" |
||||
printf '%b' "${url_encoded//%/\x}" |
||||
} |
||||
|
||||
parse_yaml() { |
||||
# Function to parse YAML files and add values to variables. Send it to a temp file and source it |
||||
# https://gist.github.com/DinoChiesa/3e3c3866b51290f31243 which is derived from |
||||
# https://gist.github.com/epiloque/8cf512c6d64641bde388 |
||||
# |
||||
# Usage: |
||||
# $ parse_yaml sample.yml > /some/tempfile |
||||
# |
||||
# parse_yaml accepts a prefix argument so that imported settings all have a common prefix |
||||
# (which will reduce the risk of name-space collisions). |
||||
# |
||||
# $ parse_yaml sample.yml "CONF_" |
||||
|
||||
local prefix=$2 |
||||
local s |
||||
local w |
||||
local fs |
||||
s='[[:space:]]*' |
||||
w='[a-zA-Z0-9_]*' |
||||
fs="$(echo @|tr @ '\034')" |
||||
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ |
||||
-e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" | |
||||
awk -F"$fs" '{ |
||||
indent = length($1)/2; |
||||
if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";} |
||||
vname[indent] = $2; |
||||
for (i in vname) {if (i > indent) {delete vname[i]}} |
||||
if (length($3) > 0) { |
||||
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")} |
||||
printf("%s%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, conj[indent-1],$3); |
||||
} |
||||
}' | sed 's/_=/+=/g' |
||||
} |
||||
|
||||
httpStatus() { |
||||
# ----------------------------------- |
||||
# Shamelessly taken from: https://gist.github.com/rsvp/1171304 |
||||
# |
||||
# Usage: httpStatus URL [timeout] [--code or --status] [see 4.] |
||||
# ^message with code (default) |
||||
# ^code (numeric only) |
||||
# ^in secs (default: 3) |
||||
# ^URL without "http://" prefix works fine. |
||||
# |
||||
# 4. curl options: e.g. use -L to follow redirects. |
||||
# |
||||
# Dependencies: curl |
||||
# |
||||
# Example: $ httpStatus bit.ly |
||||
# 301 Redirection: Moved Permanently |
||||
# |
||||
# Example: $ httpStatus www.google.com 100 -c |
||||
# 200 |
||||
# |
||||
# ----------------------------------- |
||||
local curlops |
||||
local arg4 |
||||
local arg5 |
||||
local arg6 |
||||
local arg7 |
||||
local flag |
||||
local timeout |
||||
local url |
||||
|
||||
saveIFS=${IFS} |
||||
IFS=$' \n\t' |
||||
|
||||
url=${1} |
||||
timeout=${2:-'3'} |
||||
# ^in seconds |
||||
flag=${3:-'--status'} |
||||
# curl options, e.g. -L to follow redirects |
||||
arg4=${4:-''} |
||||
arg5=${5:-''} |
||||
arg6=${6:-''} |
||||
arg7=${7:-''} |
||||
curlops="${arg4} ${arg5} ${arg6} ${arg7}" |
||||
|
||||
# __________ get the CODE which is numeric: |
||||
code=`echo $(curl --write-out %{http_code} --silent --connect-timeout ${timeout} \ |
||||
--no-keepalive ${curlops} --output /dev/null ${url})` |
||||
|
||||
# __________ get the STATUS (from code) which is human interpretable: |
||||
case $code in |
||||
000) status="Not responding within ${timeout} seconds" ;; |
||||
100) status="Informational: Continue" ;; |
||||
101) status="Informational: Switching Protocols" ;; |
||||
200) status="Successful: OK within ${timeout} seconds" ;; |
||||
201) status="Successful: Created" ;; |
||||
202) status="Successful: Accepted" ;; |
||||
203) status="Successful: Non-Authoritative Information" ;; |
||||
204) status="Successful: No Content" ;; |
||||
205) status="Successful: Reset Content" ;; |
||||
206) status="Successful: Partial Content" ;; |
||||
300) status="Redirection: Multiple Choices" ;; |
||||
301) status="Redirection: Moved Permanently" ;; |
||||
302) status="Redirection: Found residing temporarily under different URI" ;; |
||||
303) status="Redirection: See Other" ;; |
||||
304) status="Redirection: Not Modified" ;; |
||||
305) status="Redirection: Use Proxy" ;; |
||||
306) status="Redirection: status not defined" ;; |
||||
307) status="Redirection: Temporary Redirect" ;; |
||||
400) status="Client Error: Bad Request" ;; |
||||
401) status="Client Error: Unauthorized" ;; |
||||
402) status="Client Error: Payment Required" ;; |
||||
403) status="Client Error: Forbidden" ;; |
||||
404) status="Client Error: Not Found" ;; |
||||
405) status="Client Error: Method Not Allowed" ;; |
||||
406) status="Client Error: Not Acceptable" ;; |
||||
407) status="Client Error: Proxy Authentication Required" ;; |
||||
408) status="Client Error: Request Timeout within ${timeout} seconds" ;; |
||||
409) status="Client Error: Conflict" ;; |
||||
410) status="Client Error: Gone" ;; |
||||
411) status="Client Error: Length Required" ;; |
||||
412) status="Client Error: Precondition Failed" ;; |
||||
413) status="Client Error: Request Entity Too Large" ;; |
||||
414) status="Client Error: Request-URI Too Long" ;; |
||||
415) status="Client Error: Unsupported Media Type" ;; |
||||
416) status="Client Error: Requested Range Not Satisfiable" ;; |
||||
417) status="Client Error: Expectation Failed" ;; |
||||
500) status="Server Error: Internal Server Error" ;; |
||||
501) status="Server Error: Not Implemented" ;; |
||||
502) status="Server Error: Bad Gateway" ;; |
||||
503) status="Server Error: Service Unavailable" ;; |
||||
504) status="Server Error: Gateway Timeout within ${timeout} seconds" ;; |
||||
505) status="Server Error: HTTP Version Not Supported" ;; |
||||
*) echo " !! httpstatus: status not defined." && safeExit ;; |
||||
esac |
||||
|
||||
|
||||
# _______________ MAIN |
||||
case ${flag} in |
||||
--status) echo "${code} ${status}" ;; |
||||
-s) echo "${code} ${status}" ;; |
||||
--code) echo "${code}" ;; |
||||
-c) echo "${code}" ;; |
||||
*) echo " !! httpstatus: bad flag" && safeExit;; |
||||
esac |
||||
|
||||
IFS="${saveIFS}" |
||||
} |
||||
|
||||
function makeCSV() { |
||||
# Creates a new CSV file if one does not already exist. |
||||
# Takes passed arguments and writes them as a header line to the CSV |
||||
# Usage 'makeCSV column1 column2 column3' |
||||
|
||||
# Set the location and name of the CSV File |
||||
if [ -z "${csvLocation}" ]; then |
||||
csvLocation="${HOME}/Desktop" |
||||
fi |
||||
if [ -z "${csvName}" ]; then |
||||
csvName="$(LC_ALL=C date +%Y-%m-%d)-${FUNCNAME[1]}.csv" |
||||
fi |
||||
csvFile="${csvLocation}/${csvName}" |
||||
|
||||
# Overwrite existing file? If not overwritten, new content is added |
||||
# to the bottom of the existing file |
||||
if [ -f "${csvFile}" ]; then |
||||
seek_confirmation "${csvFile} already exists. Overwrite?" |
||||
if is_confirmed; then |
||||
rm "${csvFile}" |
||||
writeCSV "$@" |
||||
fi |
||||
fi |
||||
} |
||||
|
||||
function writeCSV() { |
||||
# Takes passed arguments and writes them as a comma separated line |
||||
# Usage 'writeCSV column1 column2 column3' |
||||
|
||||
csvInput=($@) |
||||
saveIFS=$IFS |
||||
IFS=',' |
||||
echo "${csvInput[*]}" >> "${csvFile}" |
||||
IFS=$saveIFS |
||||
|
||||
} |
||||
|
||||
function json2yaml() { |
||||
# convert json files to yaml using python and PyYAML |
||||
python -c 'import sys, yaml, json; yaml.safe_dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' < "$1" |
||||
} |
||||
|
||||
function yaml2json() { |
||||
# convert yaml files to json using python and PyYAML |
||||
python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < "$1" |
||||
} |
Loading…
Reference in new issue