대문자를 소문자로 또는 그 반대로 변환하는 bash 스크립트

대문자를 소문자로 또는 그 반대로 변환하는 bash 스크립트

내 스크립트를 확인하고 제안해 주세요. 입력으로 단어(최소 2자, 최대 5자)를 얻으려고 합니다.

사용자는 문자 위치를 제공하고 스크립트는 이를 소문자에서 대문자로 또는 대문자에서 소문자로 변경합니다. 지금까지 불완전한 스크립트는 다음과 같습니다.

입력하다:teSt 3

산출: 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

답변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

답변2

~를 사용하여 대문자와 소문자를 전환할 수 있습니다.

이것을 확인하세요:

#!/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

답변3

이 스크립트는 지정된 문자의 대소문자만 전환합니다. 입력의 유효성을 검사하지 않습니다.

#!/bin/bash

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

시험:

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

관련 정보