functions.bash
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
## library of useful functions, usually prefixed with '_'
|
||||
|
||||
## ===============
|
||||
## ARRAY Functions
|
||||
## ===============
|
||||
|
||||
function _array_contains {
|
||||
local -n array=$1
|
||||
local element=$2
|
||||
[[ " ${array[@]} " =~ " ${element} " ]] && return 0 || return 1
|
||||
}
|
||||
|
||||
function _array_intersect {
|
||||
local -n arr1=$1
|
||||
local -n arr2=$2
|
||||
local -n result=$3
|
||||
|
||||
declare -A include
|
||||
for item in "${arr2[@]}"; do include["$item"]=1; done
|
||||
|
||||
result=()
|
||||
for item in "${arr1[@]}"; do [[ -n ${include["$item"]} ]] && result+=("$item"); done
|
||||
}
|
||||
|
||||
function _array_subtract {
|
||||
local -n arr1=$1 # First array
|
||||
local -n arr2=$2 # Array to subtract
|
||||
local -n result=$3 # Output array
|
||||
|
||||
[[ ${#arr2[@]} == 0 ]] && result=("${arr1[@]}") && return
|
||||
|
||||
declare -A exclude
|
||||
for item in "${arr2[@]}"; do exclude["$item"]=1; done
|
||||
|
||||
result=()
|
||||
for item in "${arr1[@]}"; do [[ -z ${exclude["$item"]} ]] && result+=("$item"); done
|
||||
}
|
||||
|
||||
## ==============
|
||||
## TEXT Functions
|
||||
## ==============
|
||||
|
||||
function _pluralize_simple {
|
||||
echo -n "$1 "
|
||||
[[ $1 -eq 1 || $1 -eq -1 ]] && echo ${2} || echo ${2}s
|
||||
}
|
||||
|
||||
## ==============
|
||||
## READ Functions
|
||||
## ==============
|
||||
|
||||
function _confirm_destructive {
|
||||
local message="${1:-This cannot be undone!}"
|
||||
echo "⚠️ WARNING: $message"
|
||||
read -p "Type YES to confirm: " response
|
||||
case "$response" in
|
||||
[yY][eE][sS] | [yY]) return 0 ;;
|
||||
*) echo "canceled!" && return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
## ==============
|
||||
## Deprecated: FIXME: to remove
|
||||
## ==============
|
||||
|
||||
##
|
||||
# return 0 (true) if array (passed by name) contains element
|
||||
# usage:
|
||||
# ARRAY=( a b c )
|
||||
# containsElement ARRAY 'a' => 0
|
||||
function containsElement {
|
||||
isArray "$1" || (echo >&2 "ERROR: <$1> not an array!" && return 2)
|
||||
array_inter="$1[@]"
|
||||
array=("${!array_inter}")
|
||||
for i in "${array[@]}"; do [[ "$i" == "$2" ]] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
## return 0 (true) if arg1 (passed by name) is an array
|
||||
function isArray {
|
||||
[[ "$(declare -p "$1" 2>/dev/null)" =~ "declare -a" ]] || return 1
|
||||
}
|
||||
|
||||
function isDebian {
|
||||
grep ^ID=debian /etc/os-release
|
||||
}
|
||||
|
||||
function isArch {
|
||||
grep ^ID=arch /etc/os-release
|
||||
}
|
||||
|
||||
function os-release {
|
||||
grep ^ID= /etc/os-release | cut -d '=' -f2
|
||||
}
|
||||
|
||||
function askConfirmation {
|
||||
case "$1" in
|
||||
y | Y | yes | YES)
|
||||
QUESTION="(Y/n)?"
|
||||
DEFAULT=0
|
||||
;;
|
||||
*)
|
||||
QUESTION="(y/N)?"
|
||||
DEFAULT=1
|
||||
;;
|
||||
esac
|
||||
read -rp "$QUESTION : " choice
|
||||
case "$choice" in
|
||||
y | Y | yes | YES) return 0 ;; #true
|
||||
n | no | N | NO) return 1 ;; #false
|
||||
*) return $DEFAULT ;;
|
||||
esac
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
##
|
||||
# return 0 (true) if array (passed by name) contains element
|
||||
# usage:
|
||||
# ARRAY=( a b c )
|
||||
# containsElement ARRAY 'a' => 0
|
||||
function containsElement {
|
||||
isArray "$1" || (echo >&2 "ERROR: <$1> not an array!" && return 2)
|
||||
array_inter="$1[@]"
|
||||
array=("${!array_inter}")
|
||||
for i in "${array[@]}"; do [[ "$i" == "$2" ]] && return 0; done
|
||||
return 1
|
||||
}
|
||||
|
||||
## return 0 (true) if arg1 (passed by name) is an array
|
||||
function isArray {
|
||||
[[ "$(declare -p "$1" 2>/dev/null)" =~ "declare -a" ]] || return 1
|
||||
}
|
||||
|
||||
function isDebian {
|
||||
grep ^ID=debian /etc/os-release
|
||||
}
|
||||
|
||||
function isArch {
|
||||
grep ^ID=arch /etc/os-release
|
||||
}
|
||||
|
||||
function os-release {
|
||||
grep ^ID= /etc/os-release | cut -d '=' -f2
|
||||
}
|
||||
|
||||
function askConfirmation {
|
||||
case "$1" in
|
||||
y | Y | yes | YES)
|
||||
QUESTION="(Y/n)?"
|
||||
DEFAULT=0
|
||||
;;
|
||||
*)
|
||||
QUESTION="(y/N)?"
|
||||
DEFAULT=1
|
||||
;;
|
||||
esac
|
||||
read -rp "$QUESTION : " choice
|
||||
case "$choice" in
|
||||
y | Y | yes | YES) return 0 ;; #true
|
||||
n | no | N | NO) return 1 ;; #false
|
||||
*) return $DEFAULT ;;
|
||||
esac
|
||||
}
|
||||
Reference in New Issue
Block a user