How to capitalize+concatenate words of a string?
(first letter uppercase and all other other letters lowercase)
example: 
input  = "jAMeS bOnD" 
output = "JamesBond"
How to capitalize+concatenate words of a string?
(first letter uppercase and all other other letters lowercase)
example: 
input  = "jAMeS bOnD" 
output = "JamesBond"
 
    
    String manipulation available in bash version 4:
${variable,,} to lowercase all letters${variable^} to uppercase first letter of each word${words[*]^} instead of ${words[@]^} to save some script linesAnd other improvements from mklement0 (see his comments):
ARRAY -> words)local to avoid impacting IFS outside the function (once is enougth)local for all other local variables ( variable can be first declared, and later assigned)ARRAY=( $LOWERCASE ) may expands globs (filename wildcards)
set -f or shopt -so noglobread -ra words <<< "$input" instead of words=( $input )capitalize_remove_spaces()
{
  local words IFS
  read -ra words <<< "${@,,}"
  IFS=''
  echo "${words[*]^}"
}
If you want to keep alphanumeric characters only, extends the IFS built-in variable just before the read -ra words operation:
capitalize_remove_punctuation()
{
  local words IFS=$' \t\n-\'.,;!:*?' #Handle hyphenated names and punctuation
  read -ra words <<< "${@,,}"
  IFS=''
  echo "${words[*]^}"
}
> capitalize_remove_spaces 'jAMeS bOnD'
JamesBond
> capitalize_remove_spaces 'jAMeS bOnD *'
JamesBond*
> capitalize_remove_spaces 'Jean-luc GRAND-PIERRE'
Jean-lucGrand-pierre
> capitalize_remove_punctuation 'Jean-luc GRAND-PIERRE'
JeanLucGrandPierre
> capitalize_remove_punctuation 'Jean-luc GRAND-PIERRE *'
JeanLucGrandPierre
Here's a bash 3+ solution that utilizes tr for case conversion (the case conversion operators (,, ^, ...) were introduced in bash 4):
input="jAMeS bOnD"
read -ra words <<<"$input" # split input into an array of words
output="" # initialize output variable
for word in "${words[@]}"; do # loop over all words
  # add capitalized 1st letter
  output+="$(tr '[:lower:]' '[:upper:]' <<<"${word:0:1}")"
  # add lowercase version of rest of word
  output+="$(tr '[:upper:]' '[:lower:]' <<<"${word:1}")"
done
Note:
words=( $input ) to split the input string into an array of words, but there's a gotcha: the string is subject to pathname expansion, so if a word happens to be a valid glob (e.g., *), it will be expanded (replaced with matching filenames), which is undesired; using read -ra to create the array avoids this problem (-a reads into an array, -r turns off interpretation of \ chars. in the input). 
    
    From other posts, I came up with this working script:
str="jAMeS bOnD"
res=""
split=`echo $str | sed -e 's/ /\n/g'` # Split with space as delimiter
for word in $split; do
    word=${word,,} # Lowercase
    word=${word^} # Uppercase first letter
    res=$res$word # Concatenate result
done
echo $res
References:
Using awk it is little verbose but does the job::
s="jAMeS bOnD"
awk '{for (i=1; i<=NF; i++)  
   printf toupper(substr($i, 1, 1)) tolower(substr($i,2)); print ""}' <<< "$s"
JamesBond
echo -e '\n' "!!!!! PERMISSION to WRITE in  /var/log/ DENIED !!!!!"
echo -e '\n'
echo "Do you want to continue?"
echo -e '\n' "Yes or No"
read -p "Please Respond_: " Response #get input from keyboard "yes/no"
#Capitalizing 'yes/no' with # echo $Response | awk '{print toupper($0)}' or echo $Response | tr [a-z] [A-Z] 
answer=$(echo $Response | awk '{print toupper($0)}') 
case $answer in
    NO)
        echo -e '\n' "Quitting..."
        exit 1
        ;;
    YES)
        echo -e '\n' "Proceeding..."
        ;;
esac
