web-dev-qa-db-ja.com

シェルスクリプト-単一の文字入力が大文字か小文字か特殊文字かを確認します

これは私が書いた私のコードです。 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
FortuneCookie

正規表現テストを試してください:

read -p "Type a character" c
if [[ "$c" =~ [a-z] ]]; then
    echo "lowercase"
Elif [[ "$c" =~ [A-Z] ]]; then
    echo "uppercase"
else
    echo "Non-alphabetic"
fi
1
DopeGhoti

$IFSを空にして-rオプションを追加しない限り、 readは非常に特殊な方法で入力行を読み取ります です。

たとえば、ユーザーが" \x "を入力し、デフォルト値が$IFSの場合、$cにはユーザーが入力したものではなくxが含まれます。

また、[a-z]は小文字とは一致しません。ロケールのazの間のあらゆる種類に一致します(Shell間の動作に多少の違いがあります。たとえば、bash(多くのロケールでは、AとYの間の英語の文字を含みます)。一部のロケールおよび一部のツールでは、文字のシーケンスに一致することもできます。

ここでは、おそらく次のようになります。

printf '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

(その構文はPOSIX sh構文なので、bashをインストールする必要すらありません)。

英語の文字(発音区別符号なしのラテン文字からの文字)に限定したい場合は、個別に名前を付ける必要があります。

([abcdefghijklmnopqrstuvwxyz]) echo English lowercase letter;;

または、readの後とcaseステートメントの前にexport LC_ALL=Cを付けてロケールをCに修正しますが、(?)テストは一部の文字を誤って解釈する可能性があるため無効です文字のシーケンスとして。たとえば、UTF-8 éは、Cロケールでは2文字と見なされます。

4
while read -r line; do
    [[ "${line:0:1}" =~ [[:upper:]] ]] && echo "Started with upper: $line" || echo "$line";
done</path/to/file
0
A T

Pythonで試してみましたが、それもうまくいきました

#!/usr/bin/python
input=raw_input("enter the user input")
k=input.isalpha()
alph_out=str(k)
if alph_out == "True":
    print "{0} is alphabet".format(input)
    upper_lower=input.isupper()
    up_lo_deci=str(upper_lower)
    if up_lo_deci == "True":
        print "{0} is Capital letter".format(input)
    Elif up_lo_deci == "False":
        print "{0} is lower letter".format(input)
Elif alph_out == "False":
    print "{0} is digit or symbole".format(input)

出力

プラヴィーン:〜/

t1$ python u.py 
enter the user input
10
10 is digit or symbole


ter the user input
P
P is alphabet
P is Capital letter

aveen@praveen:~/t1$ python u.py 
enter the user input
e
e is alphabet
e is lower letter
0