You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
55 lines
1.2 KiB
# idempotent apt install [package1 package2 ...]
|
|
function idem_apt_install() {
|
|
for i in $@; do
|
|
if ! (/usr/bin/dpkg-query --status "$i" >/dev/null 2>&1); then
|
|
sudo apt install -y "$i"
|
|
else
|
|
$VERBOSE && echo "$PREFIX apt package <$i> already installed!"
|
|
fi
|
|
done
|
|
}
|
|
|
|
##
|
|
# return 0 (true) if array (passed by name) contains element
|
|
# usage:
|
|
# ARRAY = ( a b c )
|
|
# containsElement ARRAY 'a' => 0
|
|
containsElement() {
|
|
local -a 'arraykeys=("${!'"$1"'[@]}")'
|
|
if $(isArray $1); then
|
|
for index in ${arraykeys[*]}; do
|
|
current=$1"[$index]"
|
|
[[ "${!current}" == "$2" ]] && return 0 # found
|
|
done
|
|
return 1 # not found
|
|
else
|
|
echo >&2 "ERROR: $1 not an array!"
|
|
return 2 # not an array
|
|
fi
|
|
}
|
|
|
|
isArray() {
|
|
[[ "$(declare -p $1 2>/dev/null)" =~ "declare -a" ]] && return 0 # is an array
|
|
return 1 # not an array
|
|
}
|
|
|
|
##
|
|
#
|
|
askConfirmation() {
|
|
case "$1" in
|
|
y | Y | yes | YES)
|
|
QUESTION="(Y/n)?"
|
|
DEFAULT=0
|
|
;;
|
|
*)
|
|
QUESTION="(y/N)?"
|
|
DEFAULT=1
|
|
;;
|
|
esac
|
|
read -p "$QUESTION : " choice
|
|
case "$choice" in
|
|
y | Y | yes | YES) return 0 ;; #true
|
|
n | no | N | NO) return 1 ;; #false
|
|
*) return $DEFAULT ;;
|
|
esac
|
|
}
|