쉘 스크립트 - 단일 문자 입력이 대문자, 소문자 또는 특수 문자인지 확인하십시오.

쉘 스크립트 - 단일 문자 입력이 대문자, 소문자 또는 특수 문자인지 확인하십시오.

제가 작성한 코드입니다. 읽은 문자가 대문자, 소문자 또는 특수 기호인지 확인하려면 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추가하지 않는 이상 -r,read매우 구체적인 방식으로 입력 줄을 읽습니다..

예를 들어, 사용자가 를 입력하면 사용자가 입력한 값 대신 " \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

(구문은 POSIX sh구문이므로 설치할 필요도 없습니다 bash).

영어 문자(분음 부호 없는 라틴 알파벳 문자)로 제한하려면 개별적으로 이름을 지정해야 합니다.

([abcdefghijklmnopqrstuvwxyz]) echo English lowercase letter;;

export LC_ALL=C또는 명령문 앞뒤에 read로케일을 C로 수정 case하지만 (?)일부 문자를 문자 시퀀스로 잘못 해석할 수 있으므로 테스트가 작동하지 않습니다. 예를 들어 UTF-8은 éC 로케일에서 두 문자로 처리됩니다.

답변2

정규식 테스트를 사용해 보십시오:

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

답변3

변수를 따옴표로 묶어야 합니다. 예를 들어 정규식을 문자열로 테스트하는 경우 다음을 입력할 수 있습니다.

echo "enter a US state name"
read var_1

if [[ "$var_1" =~ [A-Z] ]]; then
    echo "contains a capital letter"
elif [[ "$var_1" =~ [a-z] ]]; then
    echo "contains lower case letters"
else
    echo "contains special characters or numbers"
fi
    

답변4

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

관련 정보