私のスクリプトを確認して提案してください。入力で単語(最小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