シェルスクリプト - 単一文字入力が大文字、小文字、または特殊文字であることを確認します。

シェルスクリプト - 単一文字入力が大文字、小文字、または特殊文字であることを確認します。

私が書いたコードです。読み取った文字が大文字、小文字、または特殊記号であることを確認するには、if elifを使用する単純なコードが必要です。

echo "enter a char"
read c

if [[ $c == [A-Z] ]];
then
    echo "upper"
elif [[ $c == [a-z] ]];
then
    echo "lower"
else 
    echo "Digit or special symbols!"
fi

以下は、文字を入力した後に受信される出力です。

enter a char
A
upper

enter a char
a
Digit or special symbols!

aravind@bionic-beaver:~/Desktop$ ./1.sh
enter a char
1
Digit or special symbols!

ベストアンサー1

オプションをクリアして$IFS追加しない限り-rread非常に具体的な方法で入力行を読みます。

たとえば、ユーザーがを入力すると、ユーザーが入力した値の代わりに" \x "デフォルト値が含まれます$IFS$cx

また、小文字と一致せず、[a-z]ロケールa内とロケールの間のすべての型と一致しますz(シェル間の動作に若干の違いがあります。たとえば、bash多くのロケールでは、AとYの間の英語の文字が含まれます)。特定のロケールと特定のツールの文字シーケンスも一致させることができます。

ここでは、次のことができます。

printf >&2 'Please enter a character: '
IFS= read -r c
case $c in
  ([[:lower:]]) echo lowercase letter;;
  ([[:upper:]]) echo uppercase letter;;
  ([[:alpha:]]) echo neither lower nor uppercase letter;;
  ([[:digit:]]) echo decimal digit;;
  (?) echo any other single character;;
  ("") echo nothing;;
  (*) echo anything else;;
esac

(構文はPOSIXsh構文なのでインストールする必要もありませんbash)。

英語の文字(分音符なしのラテンアルファベット文字)に制限するには、個別に名前を付ける必要があります。

([abcdefghijklmnopqrstuvwxyz]) echo English lowercase letter;;

export LC_ALL=Cあるいは、ステートメントの前後にreadロケールをCに変更しcaseますが、(?)一部の文字を文字シーケンスとして誤って解釈する可能性があるため、テストは機能しません。たとえば、UTF-8 はéC ロケールで 2 文字として扱われます。

おすすめ記事