bash scripting convierte mayúsculas a minúsculas y viceversa

Por favor revisa y aconseja mi script. Estoy tratando de get una palabra (min 2, max 5 chars) como su input.

El usuario proporcionará la position del personaje y luego la secuencia de commands la cambiará de menor a mayor o de mayúscula a minúscula. A continuación, hay una secuencia de commands incompleta hasta el momento:

input: teSt 3

salida: test

 #!/bin/bash clear while true do echo ******TEST***** read -p 'Enter a word :' word if [[ ${#word} -le 1 ]] || [[ ${#word} -ge 6 ]]; then echo "Invalid input (Min of 2 and max of 5)!." exit 1 fi echo ${word^^*} done 

 #!/bin/bash read -p 'Enter a word : ' str id if [[ ${#str} -le 1 ]] || [[ ${#str} -ge 6 ]]; then echo "Invalid input (Min of 2 and max of 5)!." && exit 1 idt=$((id-1)) case ${str:idt:1} in [[:lower:]]) r='\U'; ;; [[:upper:]]) r='\L'; ;; esac echo $str | sed -r "s/./$r&/$id" 

 $ ./script.sh Enter a word : test 1 Test $ ./script.sh Enter a word : Test 2 TEst $ ./script.sh Enter a word : teST 3 tesT 

puede usar ~ para alternar mayúsculas y minúsculas,

Mira esto:

 #!/bin/bash clear while true do echo ******TEST***** read -p 'Enter a word :' word pos if [[ ${#word} -le 1 ]] || [[ ${#word} -ge 6 ]]; then printf "\n\tInvalid input (Min of 2 and max of 5)!.\n\n" fi for x in `seq 0 ${#word}`; do c=${word:$x:1} if [ "$x" -eq "$(($pos-1))" ]; then printf "%s" "${c~}" else printf "%s" "${c}" fi done printf "\n\n" done 

Este script solo alterna el caso de la letra especificada. No valida la input.

 #!/bin/bash while read -r -p "Enter a word :" word position; do sed -r "s/([az])|([AZ])/\U\1\L\2/${position}" <<< "$word" done 

Pruebas:

 $ ./up_and_low_case.sh Enter a word :CAT 2 CaT Enter a word :rabbit 4 rabBit