bash scripting converte maiúsculas para minúsculas e vice-versa

3

Por gentileza, verifique e aconselhe meu roteiro. Eu estou tentando obter uma palavra (min 2, max 5 chars) como sua entrada.

O usuário fornecerá a posição do caractere e, em seguida, o script mudará de minúscula para maiúscula ou minúscula para minúscula. Abaixo está o script incompleto até agora:

entrada: teSt 3

saída: 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
    
por trixie101 07.08.2017 / 21:52

3 respostas

1
#!/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
    
por 07.08.2017 / 22:42
1

você pode usar ~ para alternar entre maiúsculas e minúsculas,

verifique isso:

#!/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
    
por 07.08.2017 / 23:13
0

Esse script apenas alterna o caso da letra especificada. Não valida entrada.

#!/bin/bash

while read -r -p "Enter a word :" word position; do
    sed -r "s/([a-z])|([A-Z])/\U\L/${position}" <<< "$word"
done    

Teste:

$ ./up_and_low_case.sh 
Enter a word :CAT 2
CaT
Enter a word :rabbit 4
rabBit
    
por 08.08.2017 / 00:03