web-dev-qa-db-ja.com

bashスクリプトは大文字を小文字に、またはその逆に変換します

スクリプトを確認してアドバイスしてください。入力としてWord(最小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
3
trixie101
#!/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
1
Ravexina

〜を使用して大文字と小文字を切り替えることができます。

これをチェックして:

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

このスクリプトは、指定された文字の大文字と小文字を切り替えるだけです。入力は検証されません。

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