shell-base/modules/scripting/helpers.lib

110 lines
2.6 KiB
Bash

#!/bin/bash
str_after () {
echo "$1" | cut -s -d "${2:-=}" -f2
}
str_before () {
echo "$1" | cut -s -d "${2:-=}" -f1
}
# must be json as a string, depends on jq
get_prop_value () {
local value
# echo in $1 get $2
value=$(echo $1 | jq -r .$2)
echo $value
}
is_array() {
local variable_name=$1
[[ "$(declare -p $variable_name 2>/dev/null)" =~ "declare -a" ]]
}
is_function() {
[[ $(type $1 2> /dev/null) ]] && echo $1 is a function
}
filename() {
# passed entire path
echo $(basename "$1" | rev | cut -f 2- -d '.' | rev)
}
fileext() {
# passed entire path
echo $1 | awk -F . '{print $NF}'
}
# // TODO remove and use path module
# // must change acl.lib and loginout, chromium, and ungoogled install files
adirname() {
# passed entire path
echo "$(cd "$(dirname "$1")" >/dev/null 2>&1 ; pwd -P )"
}
user_exists() {
id -u $1 > /dev/null 2>&1
[[ $? == 1 ]] || echo $1
}
chmod_dirs() {
# passed entire path
local usesudo
[[ $1 == -s ]] && usesudo="sudo" && shift 2
$usesudo find $1 -type f -exec chmod $2 {} +
}
parse_option () {
# usage: parse_option -f "-b one -p 22 -F another" -p
# if -f is used then it will return the complete option
# otherwise just the options value
local opts;local f;local opt; local ret
[[ $1 = "-f" ]] && { f=true;shift 1; }
[[ $1 && $2 ]] || return 1
opts=$1
opt=$2
[[ ! $opts =~ "$opt" ]] && return 1
ret=$(sed -n "/^.*$opt\s\+\(\w\+\).*$/s//\1/p" <<< $opts)
[[ $f ]] && echo "$2 $ret" || echo $ret
}
remove_empty_lines () {
if [[ -f $1 ]]; then cat $1; else echo "$1"; fi | sed -n '/^\s*$/!p'
# sed -rz 's/^\n+//; s/\n+$/\n/g'
}
remove_end_spaces () {
del=${2:-\'}
# echo delimiter: $del
# sed -e "s/[[:space:]]\{1,\}$del/$del/" <<< "$1"
res=$(sed -e "s/^$del[[:space:]]*/$del/" <<< "$1")
sed -e "s/[[:space:]]*${del}$/$del/" <<< "$res"
}
# pass any sed ' ' string and comments lines will be ignored
# https://unix.stackexchange.com/a/301432/201387
# https://stackoverflow.com/a/35874420/4695378
sed_ignore_comments () {
cmd="sed -r 'h;s/[^#]*//1;x;s/#.*//;${1};G;s/(.*)\n/\1/'"
if (( $# == 2 )) ; then
eval $cmd <<< "$2"
else
eval $cmd < /dev/stdin
fi
}
compact_file () {
# removes trailing spaces, blank lines and comments
# echo -e "$1"
# grep -v '^\s*#' $1
[[ -f $1 ]] && sed -i -e '/^\s*#/d' -e '/^\s*$/d' "$1"
# if [[ -f "$1" ]]; then cat "$1"; else echo -e "$@"; fi | sed 's/\\s*$//g' | sed -r '/^\s*$/d' | grep -v '^\s*#'
}
#rows between matched rows
# sed '1,/firstmatch/d;/secondmatch/,$d'