153 lines
4.9 KiB
Bash
Executable File
153 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
IOUtilsVersion="1.0"
|
|
|
|
IOUtilsHeader="[x] ================================ [x]"
|
|
IOUtilsQueryMark="[-] "
|
|
IOUtilsPrompt="[$USER@$HOSTNAME]> "
|
|
|
|
if [ ! "$ArrayUtilsVersion" ]; then source lib/ArrayUtils.sh; fi
|
|
|
|
function io_input_choice() {
|
|
local __io_input_choice__choice
|
|
until [ ! -z "$__io_input_choice__choice" ]; do
|
|
echo -ne "$IOUtilsPrompt"
|
|
|
|
local __io_input_choice__input
|
|
read __io_input_choice__input
|
|
|
|
local __io_input_choice__choices
|
|
for __io_input_choice__choices in ${@}; do
|
|
array_contains $__io_input_choice__choices "$__io_input_choice__input"
|
|
if [ $? -eq 0 ]; then
|
|
__io_input_choice__choice="$__io_input_choice__input"
|
|
break
|
|
fi
|
|
done
|
|
done
|
|
|
|
IOInputChoice=$__io_input_choice__choice
|
|
}
|
|
|
|
function io_dynamic_output() {
|
|
eval 'echo -ne "'${@}'"'
|
|
}
|
|
|
|
function io_input_enumerated_choice() {
|
|
local __io_input_enumerated_choice__choices=("${!1}")
|
|
local __io_input_enumerated_choice__indexes=($(seq ${#__io_input_numeric_choice__choices[@]}))
|
|
io_input_choice __io_input_enumerated_choice__indexes[@]
|
|
IOInputEnumeratedChoice=${__io_input_enumerated_choice__choices[$IOInputChoice]}
|
|
}
|
|
|
|
# This function outputs formatted lines of fields.
|
|
# The function takes an output file (like stdout),
|
|
# a "printf format string," and a variable number
|
|
# of indirect-expansion passed arrays (reference).
|
|
# NOTICE: At least the first array must be passed!
|
|
# Example: /dev/stdout "%s is %s." name[@] mood[@]
|
|
function io_output_format_fields() {
|
|
# Determine the amount of arguments passed.
|
|
local __io_output_format_fields__argument_count=${#@}
|
|
|
|
# Load locally by indirect expansion, ${! ... },
|
|
# and mangle the variable number argument arrays.
|
|
local __io_output_format_fields__i
|
|
for ((__io_output_format_fields__i = 3; \
|
|
__io_output_format_fields__i <= __io_output_format_fields__argument_count; \
|
|
__io_output_format_fields__i++)); do
|
|
eval "local __io_output_format_fields__field$__io_output_format_fields__i=(\"\${!$__io_output_format_fields__i}\")"
|
|
done
|
|
|
|
# Determine the amount of records/lines to print.
|
|
# Notice at least the first array must be passed.
|
|
local __io_output_format_fields__record_count=${#__io_output_format_fields__field3[@]}
|
|
|
|
for ((__io_output_format_fields__i = 0; \
|
|
__io_output_format_fields__i < __io_output_format_fields__record_count; \
|
|
__io_output_format_fields__i++)); do
|
|
local __io_output_format_fields__values="\"\${__io_output_format_fields__field"$( \
|
|
seq -s "[$__io_output_format_fields__i]}\" \"\${__io_output_format_fields__field" 3 $__io_output_format_fields__argument_count \
|
|
)"[$__io_output_format_fields__i]}\""
|
|
eval "printf \"$2\" $__io_output_format_fields__values > $1"
|
|
done
|
|
}
|
|
|
|
function io_query_format_fields() {
|
|
# Assure we've got required parameters.
|
|
if [ ${#@} -lt 2 ]; then
|
|
return 1
|
|
fi
|
|
|
|
local __io_query_format_fields__argument_count=${#@}
|
|
|
|
local __io_query_format_fields__query="$1"
|
|
local __io_query_format_fields__format="$2"
|
|
|
|
# Load locally by indirect expansion, ${! ... },
|
|
# and mangle the variable number argument arrays.
|
|
local __io_query_format_fields__i
|
|
for ((__io_query_format_fields__i = 3; \
|
|
__io_query_format_fields__i <= __io_query_format_fields__argument_count; \
|
|
__io_query_format_fields__i++)); do
|
|
eval "local __io_query_format_fields__f$__io_query_format_fields__i=(\"\${!$__io_query_format_fields__i}\")"
|
|
done
|
|
|
|
local __io_query_format_fields__record_count=${#__io_query_format_fields__f3[@]}
|
|
local __io_query_format_fields__indexes=($(seq $__io_query_format_fields__record_count))
|
|
|
|
if [ ! -z "$1" ]; then
|
|
if [ "`type -t $(echo -e "$IOUtilsHeader" | grep -vE '\s')`" = "function" ]; then $IOUtilsHeader;
|
|
else echo -e "$IOUtilsHeader"; fi
|
|
|
|
echo -e "$__io_query_format_fields__query"
|
|
echo
|
|
fi
|
|
|
|
io_output_format_fields /dev/stdout "$__io_query_format_fields__format" __io_query_format_fields__indexes[@] ${@:3}
|
|
|
|
echo
|
|
|
|
io_input_choice __io_query_format_fields__indexes[@]
|
|
|
|
IOQueryFormatFields=()
|
|
for ((__io_query_format_fields__i = 3; \
|
|
__io_query_format_fields__i <= __io_query_format_fields__argument_count; \
|
|
__io_query_format_fields__i++)); do
|
|
eval "IOQueryFormatFields[${#IOQueryFormatFields[@]}]=\${__io_query_format_fields__f$__io_query_format_fields__i[IOInputChoice - 1]}"
|
|
done
|
|
}
|
|
|
|
function io_query_choice() {
|
|
# Assure we've got required parameters.
|
|
if [ ${#@} -lt 2 ]; then
|
|
return 1
|
|
fi
|
|
|
|
__io_query_choice__query=$([ -z "$1" ] && echo -n "" || echo -ne "$FLUXIONVLine $1\n")
|
|
io_query_format_fields "$__io_query_choice__query" "\t$CRed[$CYel%d$CRed]$CClr %b\n" $2
|
|
|
|
IOQueryChoice="${IOQueryFormatFields[0]}"
|
|
}
|
|
|
|
function io_query_file() {
|
|
if [ ${#@} -lt 2 ]; then
|
|
return 1
|
|
fi
|
|
|
|
local __io_query_file__options
|
|
|
|
# List a line per line and redirect output.
|
|
# readarray __io_query_file__options < $2
|
|
mapfile __io_query_file__options < $2
|
|
|
|
# Strip newline characters from array elements
|
|
__io_query_file__options=("${__io_query_file__options[@]/$'\n'}")
|
|
|
|
io_query_choice "$1" __io_query_file__options[@]
|
|
|
|
IOQueryFile=$IOQueryChoice
|
|
}
|
|
|
|
# FLUXSCRIPT END
|