diff --git a/utils.sh b/utils.sh index 19cd3876bad53ce1eb0e3385d9c471f29c84beb9..ecb04b99db0a6b2fe4aca672d894470bcdb4cf94 100755 --- a/utils.sh +++ b/utils.sh @@ -21,8 +21,10 @@ text_cyan="\033[1;36m" text_yellow="\033[1;33m" text_white="\033[1;37m" -# Function Return. +# Function Return Variables. return_value="" +file_name="" +file_extension="" #endregion Global Utility Variables @@ -134,6 +136,72 @@ function get_directory_name () { fi } + +### + # Parses passed file, getting base file name and file extension. + ## +function parse_file_name () { + + # Check number of passed function args. + if [[ ${#} == 1 ]] + then + # Expected number of args passed. Continue. + if [[ -f ${1} ]] + then + # Handle for file. + get_absolute_path ${1} + return_value=${return_value##*/} + + file_name="" + file_extension="" + _recurse_file_extension ${return_value} + else + echo -e "${text_red}Passed value ( ${1} ) is not a valid file.${text_reset}" + exit 1 + fi + + # Handle for too many args. + elif [[ ${#} > 1 ]] + then + echo -e "${text_red}Too many args passed. Expected one arg, received ${#}.${text_reset}" + exit 1 + + # Handle for too few args. + else + echo -e "${text_red}Too few args passed. Expected one arg, received 0.${text_reset}" + exit 1 + fi +} + + +### + # Recursive helper function for parse_file_name(). + # Determines base file name and full file extension. + ## +function _recurse_file_extension () { + local passed_value=${1} + local parsed_extension=${passed_value##*.} + + # Check if file extension was found. Occurs when variables are not identical. + if [[ ${parsed_extension} != ${passed_value} ]] + then + # Extension found. Iterate once more. + file_name=${passed_value%.${parsed_extension}} + + # Handle if global var is currently empty or not. + if [[ ${file_extension} == "" ]] + then + file_extension=".${parsed_extension}" + else + file_extension=".${parsed_extension}${file_extension}" + fi + + # Call recursive function once more. + _recurse_file_extension ${file_name} + fi +} + + #endregion Directory Functions