[완료] 스크립트에서 입력받은 값이 숫자인지 검사 어떻게하나요?

dcmru의 이미지

먼저 본쉘로 스크립트를 짜고있습니다.

read "변수"

read 명령어로 값을 입력을 받아 변수에 집어 넣었는데, 이것이 숫자로만 되어 있는지 어떻게 검사를 하나요?

숫자가 아닐 때는 에러를 나타내고 다시 입력을 받을려고 합니다.

쉘스크립트에서 변수는 형이 없다고 들었는데, 어떻게 구분을 해야할까요?

ymir의 이미지

음수는 무시한다면... ;;

$ cat isnum.sh
#!/bin/sh
 
v=$1
r=${v//[0-9]/}
if [ -z "$r" ] ; then
    echo "$v is number."
else
    echo "$v is not number."
fi
 
$ sh isnum.sh 1234
1234 is number.
$ sh isnum.sh 1a234
1a234 is not number.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

ymir의 이미지


$ cat isnum.sh
#!/bin/sh
 
v=${1}
r=${v#-}
r=${r//[0-9]/}
if [ -z "$r" ] ; then
        echo "$v is number."
else
        echo "$v is not number."
fi
 
$ sh isnum.sh 1234
1234 is number.
$ sh isnum.sh -1234
-1234 is number.
$ sh isnum.sh 1-234
1-234 is not number.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

dcmru의 이미지

답변 감사드립니다.

r=${v#-}

${v#-}의 역할이 패턴에서 첫단어의 -를 없애주는 역할을 하는군요.

r=${r//[0-9]/}

${r//[0-9]/} 는 숫자를 빈문자로 교체해주는 작업이네요.

혹 문법이 Bash 에서만 쓸 수 있을것 같습니다.

다른 OS 에서 테스트를 해봐야겠네요 ^^

모르는 것이 많네요. 잘배워갑니다!

----------------
노력만이 살길이다.

노력만이 살길이다.

jongcheolyu의 이미지

쉘 내장 함수같은게 있는진 모르겠습니다만...

다음샘플처럼 입력받은 값을 패턴검사 해보면 어떨런지요?

--이하 허접샘플 (^^) --

#!/bin/sh
 
read a
result=`echo $a | grep -E "[^0-9]+"`
if [ -z "$result" ]; then
  echo "숫자입력 : $a"
  exit 0
fi
 
echo "숫자가아니네 : $a"
exit 0

살짝수정및 오타수정...^^

dcmru의 이미지

패턴을 검사하는 방법도 있었군요. ^^ 답변감사드립니다.
----------------
노력만이 살길이다.

노력만이 살길이다.

alfalf의 이미지

echo 변수 | grep -qe "^[-\?[0-9]\+\.\?[0-9]*$" && echo "숫자" || echo "숫자아님"

만일 if 문을 사용하신다면

if echo 변수 | grep -qe "^[-\?[0-9]\+\.\?[0-9]*$"
then
    숫자일 경우 하는 일
else
    숫자가 아닐 경우 하는 일
fi
dcmru의 이미지

답변감사드립니다.

"^[-\?[0-9]\+\.\?[0-9]*$" 정규표현식으로 패턴을 찾는 것같은데, 좀복잡하게 보입니다.

어떤표현인지 설명해주실 순 없나요?

----------------
노력만이 살길이다.

노력만이 살길이다.

=~의 이미지

pattern='~[0-9]+$'
if [[ $my_number =~ $pattern ]]; then
echo "this is number only"
fi

=~의 이미지

pattern='~[0-9]+$'
if [[ $my_number =~ $pattern ]]; then
echo "this is number only"
fi

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.