쉘 스크립트의 입력이 알파벳 문자인지 문자인지 확인하고 싶습니다. 어떻게 해야 하나요?
답변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"