mirror of
https://github.com/trimstray/the-book-of-secret-knowledge
synced 2024-12-26 09:58:40 +01:00
206 lines
5.1 KiB
Text
206 lines
5.1 KiB
Text
|
#!/usr/bin/env bash
|
||
|
|
||
|
### BEG SCRIPT INFO
|
||
|
#
|
||
|
# Header:
|
||
|
#
|
||
|
# fname : "awesome-ninja-admins"
|
||
|
# cdate : "24.05.2018"
|
||
|
# author : "Michał Żurawski <trimstray@gmail.com>"
|
||
|
# tab_size : "2"
|
||
|
# soft_tabs : "yes"
|
||
|
#
|
||
|
# Description:
|
||
|
#
|
||
|
# See README.md file for more information.
|
||
|
#
|
||
|
# License:
|
||
|
#
|
||
|
# awesome-ninja-admins, Copyright (C) 2018 Michał Żurawski
|
||
|
#
|
||
|
# This program is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation, either version 3 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
#
|
||
|
### END SCRIPT INFO
|
||
|
|
||
|
|
||
|
# The array that store call parameters.
|
||
|
# shellcheck disable=SC2034
|
||
|
__init_params=()
|
||
|
__script_params=("$@")
|
||
|
|
||
|
# Store the name of the script and directory call.
|
||
|
readonly _init_name="$(basename "$0")"
|
||
|
readonly _init_directory="$(dirname "$(readlink -f "$0")")"
|
||
|
|
||
|
# Set root directory.
|
||
|
readonly _rel="${_init_directory}"
|
||
|
|
||
|
# Directory structure.
|
||
|
# shellcheck disable=SC2154
|
||
|
readonly _src="${_rel}/src"
|
||
|
readonly _lib="${_rel}/lib"
|
||
|
readonly _cfg="${_rel}/etc"
|
||
|
|
||
|
# shellcheck disable=SC1090,SC1091
|
||
|
source "${_src}/settings"
|
||
|
# shellcheck disable=SC1090
|
||
|
source "${_src}/helpers"
|
||
|
|
||
|
|
||
|
################################################################################
|
||
|
######################### Main function (script init) ##########################
|
||
|
################################################################################
|
||
|
|
||
|
function __main__() {
|
||
|
|
||
|
local _FUNCTION_ID="__main__"
|
||
|
local _STATE="0"
|
||
|
|
||
|
# Stores the current date.
|
||
|
readonly _cdate=$(date +%Y%m%d)
|
||
|
|
||
|
# External configuration file (-c|--config script param).
|
||
|
config=""
|
||
|
load_state="0"
|
||
|
|
||
|
# Declaration of output variables (--debug and --verbose params).
|
||
|
stdout_mode=""
|
||
|
printf_mode=""
|
||
|
# Enable/disable output colors.
|
||
|
# shellcheck disable=SC2034
|
||
|
s_color="true"
|
||
|
|
||
|
# We place here used commands at script runtime, as strings to anything
|
||
|
# unnecessarily run.
|
||
|
readonly commands=("basename" "dirname" "stat" "date" "grep" "egrep" "cut" \
|
||
|
"sed" "gzip" "tar")
|
||
|
|
||
|
# If you intend to specify the full path to the command we do it like:
|
||
|
# readonly exec_gzip="/bin/gzip"
|
||
|
|
||
|
# Stores the names of the missing commands.
|
||
|
missing_hash=()
|
||
|
missing_counter="0"
|
||
|
|
||
|
for i in "${commands[@]}" ; do
|
||
|
|
||
|
if [[ ! -z "$i" ]] ; then
|
||
|
|
||
|
hash "$i" >/dev/null 2>&1 ; state="$?"
|
||
|
|
||
|
# If the command was not found put it in the array
|
||
|
if [[ "$state" -ne 0 ]] ; then
|
||
|
|
||
|
missing_hash+=("$i")
|
||
|
((missing_counter++))
|
||
|
|
||
|
fi
|
||
|
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
# It is a good idea to terminate the script at this stage
|
||
|
# with information for the user to fix the errors if at least one
|
||
|
# of the required commands in the commands array is not found.
|
||
|
if [[ "$missing_counter" -gt 0 ]] ; then
|
||
|
|
||
|
printf "not found in PATH: %s\\n" "${missing_hash[*]}" >&2
|
||
|
exit 1
|
||
|
|
||
|
fi
|
||
|
|
||
|
# Specifies the call parameters of the script, the exact description
|
||
|
# can be found in _help_ and file README.md.
|
||
|
local _short_opt=""
|
||
|
local _long_opt="help"
|
||
|
|
||
|
_GETOPT_PARAMS=$(getopt -o "${_short_opt}" --long "${_long_opt}" \
|
||
|
-n "${_init_name}" -- "${__script_params[@]}")
|
||
|
|
||
|
# With this structure, in the case of problems with the parameters placed
|
||
|
# in the _GETOPT_PARAMS variable we finish the script. Keep this in mind
|
||
|
# because it has some consequences - the __main __() function will not be
|
||
|
# executed.
|
||
|
|
||
|
# Ends an error if the parameter or its argument is not valid.
|
||
|
_getopt_state="$?"
|
||
|
if [ "$_getopt_state" != 0 ] ; then
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
eval set -- "$_GETOPT_PARAMS"
|
||
|
while true ; do
|
||
|
|
||
|
case $1 in
|
||
|
|
||
|
--help)
|
||
|
|
||
|
_help_
|
||
|
|
||
|
shift ; exit 0 ;;
|
||
|
|
||
|
*)
|
||
|
|
||
|
if [[ "$2" == "-" ]] || [[ ! -z "$2" ]] ; then
|
||
|
|
||
|
printf "%s: invalid option -- '%s'\\n" "$_init_name" "$2"
|
||
|
exit 1
|
||
|
|
||
|
# elif [[ -z "$2" ]] ; then break ; fi
|
||
|
else break ; fi
|
||
|
|
||
|
;;
|
||
|
|
||
|
esac
|
||
|
|
||
|
done
|
||
|
|
||
|
################################# USER SPACE #################################
|
||
|
# ````````````````````````````````````````````````````````````````````````````
|
||
|
# Put here all your variable declarations, function calls
|
||
|
# and all the other code blocks.
|
||
|
|
||
|
# In this section we add external file (for -c|--config script param).
|
||
|
if [[ "$load_state" -eq 1 ]] ; then _load "head" "$config" ; fi
|
||
|
|
||
|
# shellcheck disable=SC2034
|
||
|
# Generate random value.
|
||
|
_random=$(date +"%s")
|
||
|
|
||
|
local _user
|
||
|
|
||
|
_user=$(whoami)
|
||
|
|
||
|
_sprintf "head" "Awesome-Ninja-Admins"
|
||
|
|
||
|
_sprintf "info" "tasks:"
|
||
|
|
||
|
_init_skel
|
||
|
|
||
|
echo
|
||
|
|
||
|
# ````````````````````````````````````````````````````````````````````````````
|
||
|
|
||
|
return "$_STATE"
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
# We pass arguments to the __main__ function.
|
||
|
# It is required if you want to run on arguments type $1, $2, ...
|
||
|
__main__ "${__script_params[@]}"
|
||
|
|
||
|
exit 0
|