[재능상품] Shell Script를 이용한 Bingo 함수 버전, 재귀 처리, 숫자 야구

 정보

  • 업무명     : Shell Script를 이용한 Bingo 함수 버전, 재귀 처리, 숫자 야구

  • 작성자     : 이상호

  • 작성일     : 2020-10-18

  • 설   명      :

  • 수정이력 :

 

 내용

[개요]

  • 안녕하세요? 웹 개발 및 연구 개발을 담당하고 있는 해솔입니다.

  • 다년간 축적된 경험 (기상학 학술 보고서 및 국/영문 학술 논문 게재, 블로그 운영, IT 회사 웹 개발 담당) 및 노하우를 바탕으로 개개인에게 맞춤형 솔루션을 수행할 수 있습니다.

  • 특히 재능 플랫폼 (크몽, 오투잡, 해피캠퍼스, 레포트 월드)에서 누구보다도 경쟁력 있는 가격으로 양질의 서비스를 제공하고 있습니다.

    • 아스키 형식의 텍스트 (text) 파일부터 과학자료 형식 (HDF, H5, NetCDF, Grib, Grb) 및 Data Base (DB) 자료까지 다양한 형태의 자료를 이용하여 수집, 전처리, 분석, 시각화해 드립니다.

    • 또한 웹 사이트에 대한 정보를 이용한 웹 크롤링 및 그에 따른 엑셀 및 DB 구축도 가능합니다.

    • 아울러 기초 통계 (빈도분포, Prired t-test, Wilcoxn 등)에서 지도/비지도 학습을 통한 회귀모형 구축에 이르기 까지 효율적인 통계 정보를 제공합니다.

    • 최근 대한민국의 후속위성인 천리안위성 2A호 웹 서비스 서브시스템 및 환경위성 2B호 통합 자료처리 서브시스템에 대한 웹 개발을 수행하였습니다.

  • 그리고 해솔 블로그에서는 다양한 기상학/천문학 정보와 더불어 사무 자동화/프로그래밍 언어를 소개하오니 방문 부탁드립니다.

  • 좋은 하루 보내세요.

 

 

[재능플랫폼] 오투잡

 

[IT개발 - 응용프로그래밍] 통계 분석, 데이터 분석, 시각화를 성실하게 해 드립니다. - 재능마켓 �

판매가격:10,000원, [소개] - 데이터산업진흥원 데이터 가공 공급기업 선정 - 정보통신산업 진흥원 데이터 가공 공급기업 선정 - 다년간 축적된 경험 노하우를 바탕으로 개개인에게 맞춤형 솔루션�

www.otwojob.com

 

[재능플랫폼] 크몽

 

데이터수집, 파싱, 크롤링 해 드립니다. | 50,000원부터 시작 가능한 총 평점 0점의 IT·프로그래밍,

0개 총 작업 개수 완료한 총 평점 0점인 shlee1990의 IT·프로그래밍, 데이터분석·리포트, 데이터 마이닝·크롤링 서비스를 0개의 리뷰와 함께 확인해 보세요. IT·프로그래밍, 데이터분석·리포트, 데

kmong.com

 

 요청

[세부 사항]

  • 과제6: Bingo - 함수 버전

  • 연습과제: 재귀적 destroy를 응용하여 지정된 디렉토리 아래에 있는 전체 파일들 개수를 출력하는 스크립트를 짠다 (지정된 디렉토리는 week10).

  • 숫자 야구

    • 조건 : 0 or 1의 임의 난수를 계속 생성하고, 키보드 입력으로부터 0.1의 숫자를 입력받아 일치하면 "Strike" 아니면 Ball를 출력

    • Strike or Ball 여부를 키보드로부터 입력받은 수를 인수로 하여 함수 실행

    • 종료조건 3 Strike 라면 Out, 4 Ball일시 Win 출력시키고 프로그램을 종료한다.

 

 완료

[사용 OS]

  • Linux (CentOS v7.3)

 

[사용 언어]

  • Shell Script

 

[명세]

  • Bingo 함수

    • read를 통해 argsInputVal 입력 받기

    • 해당 입력 파라미터를 통해 함수 (fnBingo) 실행 

#!/bin/bash

#========================================================
#  Bingo 함수 버전
#========================================================
fnArgsNumberValid() {

   local argsVal=$1

   if [ $argsVal -lt 1 ]; then
      echo "Lower than"

      return 0
   fi

   if [ $argsVal -gt 1 ]; then
      echo "Higher than"

      return 0
   fi

   echo "Bingo!"

   return 1
}

fnBingo() {

   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   while : 
   do 
      fnArgsNumberValid $argsVal
      local result=$?

      # echo $result      

      if [ $result -eq 1 ]; then
         break
      fi

      read argsInputVal
      fnBingo $argsInputVal
   done

   exit 0
}

# read argsInputVal
# fnBingo $argsInputVal

 

  • 재귀적 destroy

#==========================================================
#  재귀적 destroy 이용
#==========================================================
destroy1() {
   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   if [ -d $argsVal ]; then
      local list=$(ls $argsVal/*)

      for file in $list
      do
         ((num = $num + 1))
   
         # echo $file $num
      done

      echo $num
   fi
}

# num=0
# source=./week10

# destroy1 $source

 

  • 숫자 야구

#==========================================================
#  숫자 야구
#==========================================================
fnBaseBallGame() {

   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   while : 
   do 
      randomNum=$((RANDOM%2))

      if [ $argsVal -eq 0 ] || [ $argsVal -eq 1 ]; then
         if [ $randomNum -eq $argsVal ]; then
            echo "Strike"
            iStrikeCount=$(($iStrikeCount + 1))
         else
            echo "Ball"
            iBallCount=$(($iBallCount + 1))
         fi
      fi

      # echo $randomNum $argsInputNum $iStrikeCount $iBallCount

      if [ $iStrikeCount -eq 3 ]; then
         echo "Out"
         break
      fi

      if [ $iBallCount -eq 4 ]; then
         echo "Win"
         break
      fi

      read argsInputVal
      fnBaseBallGame $argsInputVal
   done

   exit 0
}

iStrikeCount=0
iBallCount=0
read argsInputVal

fnBaseBallGame $argsInputVal

 

[소스 코드]

#!/bin/bash

#========================================================
#  Bingo 함수 버전
#========================================================
fnArgsNumberValid() {

   local argsVal=$1

   if [ $argsVal -lt 1 ]; then
      echo "Lower than"

      return 0
   fi

   if [ $argsVal -gt 1 ]; then
      echo "Higher than"

      return 0
   fi

   echo "Bingo!"

   return 1
}

fnBingo() {

   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   while : 
   do 
      fnArgsNumberValid $argsVal
      local result=$?

      # echo $result      

      if [ $result -eq 1 ]; then
         break
      fi

      read argsInputVal
      fnBingo $argsInputVal
   done

   exit 0
}

# read argsInputVal
# fnBingo $argsInputVal


#==========================================================
#  재귀적 destroy 이용
#==========================================================
destroy1() {
   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   if [ -d $argsVal ]; then
      local list=$(ls $argsVal/*)

      for file in $list
      do
         ((num = $num + 1))
   
         # echo $file $num
      done

      echo $num
   fi
}

# num=0
# source=./week10

# destroy1 $source

#==========================================================
#  숫자 야구
#==========================================================
fnBaseBallGame() {

   local argsNumber=$#
   if [ $argsNumber -ne 1 ]; then
      echo "args is Null"

      exit 1
   fi
   
   local argsVal=$1

   while : 
   do 
      randomNum=$((RANDOM%2))

      if [ $argsVal -eq 0 ] || [ $argsVal -eq 1 ]; then
         if [ $randomNum -eq $argsVal ]; then
            echo "Strike"
            iStrikeCount=$(($iStrikeCount + 1))
         else
            echo "Ball"
            iBallCount=$(($iBallCount + 1))
         fi
      fi

      # echo $randomNum $argsInputNum $iStrikeCount $iBallCount

      if [ $iStrikeCount -eq 3 ]; then
         echo "Out"
         break
      fi

      if [ $iBallCount -eq 4 ]; then
         echo "Win"
         break
      fi

      read argsInputVal
      fnBaseBallGame $argsInputVal
   done

   exit 0
}

iStrikeCount=0
iBallCount=0
read argsInputVal

fnBaseBallGame $argsInputVal

 

[결과물]

  • 결과 보고서

 

 

 

 

 참고 문헌

[논문]

  • 없음

[보고서]

  • 없음

[URL]

  • 없음

 

 문의사항

[기상학/프로그래밍 언어]

  • sangho.lee.1990@gmail.com

[해양학/천문학/빅데이터]

  • saimang0804@gmail.com