Linux 쉘에서 숫자 입력을 확인하는 방법은 무엇입니까?

Linux 쉘에서 숫자 입력을 확인하는 방법은 무엇입니까?

쉘 스크립트의 입력이 알파벳 문자인지 문자인지 확인하고 싶습니다. 어떻게 해야 하나요?

답변1

귀하의 질문이 상당히 모호하므로 다음과 같이 추측해 보겠습니다.

#!/bin/bash
input=$1
if [[ -z "$input" || $input == *[^[:digit:]]* ]]; then
    echo "your input '$input' is not a number" >&2
    exit 1
fi
echo "congrats, '$input' is a number"

Bash에서 [[...]]연산자는 내부적 ==으로패턴 매칭운영자, 그래서 우리는 거기에서 숫자가 아닌 문자를 찾고 있습니다.

답변2

입력이 $VAR인 경우...

if [ -z "${VAR//[0-9]/}" -a ! -z "$VAR" ]; then
  echo only has digits
fi 

답변3

알파벳 문자를 확인하려면 다음을 수행하십시오.

case $input in
  ([[:alpha:]]) echo one alpha character;;
  (*) echo 'non-alpha or not one character (or non-character)';;
esac

로케일의 문자 세트/인코딩에 따라 문자를 디코딩하고 로케일을 다시 쿼리하여 해당 문자가 있는지 확인합니다.알파벳순으로캐릭터 클래스.

$input캐릭터인지 확인하는 것이 더 까다롭습니다.

case $input in
  (?) echo one character
esac

이것을 확인하는 것입니다. 그러나 대부분의 쉘에서는 $input유효한 문자를 형성하지 않는 바이트가 포함된 경우에도 true가 반환됩니다. 이 문제를 해결하려면 다음을 수행할 수 있습니다.

case $input in
  ([[:alpha:]]) echo one alpha character;;
  (?)
     n_chars=$(($(printf %s "$input" | wc -m)))
     if [ "$n_char" -eq 1 ]; then
       echo one character
     else
       echo one byte that is not a character
     fi;;
  ("") echo empty;;
  (*) echo anything else
esac

답변4

다른 답변은 모두 좋지만 여기에 하나가 있습니다.한 줄해결책

grep -q '^[[:alnum:]]*$' <<< "$mybar" && success_command || failure_command

빈 문자열에 대해 실패 명령을 반환하려면 다음 명령을 사용하십시오.

grep -q '^[[:alnum:]]\+$' <<< "$mybar" && echo "success" || echo "failure"

관련 정보