๊ตฌํ˜„

๊ฐœ์š”

Bash๋กœ ์ž‘์„ฑ๋œ ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋‘ ๊ฐœ์˜ ์ˆซ์ž์™€ ์—ฐ์‚ฐ์ž๋ฅผ ์ฝ๊ณ  ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์ง€๋ฅผ ์„ ํƒํ•  ๋•Œ๊นŒ์ง€ ์ด์ „ ๊ณ„์‚ฐ์˜ ๊ฒฐ๊ณผ๋กœ ๊ณ„์‚ฐ์„ ๊ณ„์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์–ธ์–ด

bash, shell script

์ฝ”๋“œ ๋ฐ ํ•จ์ˆ˜

์Šคํฌ๋ฆฝํŠธ๋Š” ๋‚˜์ค‘์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‘ ๊ฐœ์˜ ์ •๊ทœ์‹ REGEX_NUMBER ๋ฐ REGEX_OPERATION์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • #!/bin/bash : ํ•ด๋‹น ํŒŒ์ผ์„ bash ์‰˜๋กœ ์‹คํ–‰์‹œํ‚จ๋‹ค๋Š” ์˜๋ฏธ
  • TOTAL : ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜
  • FLAG : ์—ฐ์‚ฐ์„ ๊ณ„์† ํ•  ์ง€ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜
  • REGEX_NUMBER : ์ˆซ์ž ํ™•์ธ ์ •๊ทœํ‘œํ˜„์‹
  • REGEX_OPERATION : ์‚ฌ์น™์—ฐ์‚ฐ ํ™•์ธ ์ •๊ทœํ‘œํ˜„์‹

is_number

์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•œ ๋‹ค์Œ REGEX_NUMBER ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์ด ์œ ํšจํ•œ ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ์œ ํšจํ•œ ์ˆซ์ž์ด๋ฉด ํ•จ์ˆ˜๋Š” ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ์œ ํšจํ•œ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์‹œ ์‹œ๋„ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ์ž ์„ค๋ช…
" " " " ์‚ฌ์ด์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์ผ๋ฐ˜ ๋ฌธ์ž๋กœ ์ธ์‹ํ•˜์ง€๋งŒ ๋‹จ, $()์™€ ` `(๋ช…๋ น์–ด ๋Œ€์ฒด ํŠน์ˆ˜๋ฌธ์ž), $ (๋ณ€์ˆ˜ ๊ฐ’ ๋Œ€์ฒด ํŠน์ˆ˜๋ฌธ์ž), \ (quotation ํŠน์ˆ˜๋ฌธ์ž) ๋“ฑ์€ ์˜ˆ์™ธ

์ฆ‰, echo "$op" ์œผ๋กœ ํ•˜๋ฉด * ๋กœ ์ž…๋ ฅ๋ฐ›์€ ์ธ์ž๊ฐ’์„ asterisk์ด ์•„๋‹Œ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ * ๋กœ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

is_operation

is_number์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ฐ์‚ฐ(+, -, *, /, %)์„ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  REGEX_OPERATION ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

is_divided_by_zero

์—ฐ์‚ฐ์ด ๋‚˜๋ˆ„๊ธฐ(/)์ด๊ณ  ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ 0์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‘ ์กฐ๊ฑด์ด ๋ชจ๋‘ ์ฐธ์ด๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ ์—ฐ์‚ฐ๊ธฐํ˜ธ์™€ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

calculate

์„ธ ๊ฐœ์˜ ์ธ์ˆ˜(์—ฐ์‚ฐ์ž์™€ ๋‘ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. case ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์ž๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•œ ๋‹ค์Œ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋Š” TOTAL ๋ณ€์ˆ˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

is_answer

์‚ฌ์šฉ์ž์—๊ฒŒ "YES" ๋˜๋Š” "NO"๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ FLAG ๋ณ€์ˆ˜๋ฅผ 1 ๋˜๋Š” 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์œ ์—ฐํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€๋ฌธ์ž ๋˜๋Š” ์†Œ๋ฌธ์ž ๋˜๋Š” ์ถ•์•ฝํ˜• "y" ๋˜๋Š” "n"์œผ๋กœ "YES" ๋˜๋Š” "NO"๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

main

์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์ง€๋ฅผ ์„ ํƒํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์†๋˜๋Š” ๋ฃจํ”„์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋ฃจํ”„ ๋‚ด์—์„œ ์Šคํฌ๋ฆฝํŠธ๋Š” is_number ๋ฐ is_operation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž, ์—ฐ์‚ฐ์ž ๋ฐ ๋‘ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์ฝ์€ ๋‹ค์Œ is_divided_by_zero ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์ด 0์œผ๋กœ ๋‚˜๋‰˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ด 0์œผ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ์‚ฐ ํ•จ์ˆ˜์— ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณ„์†ํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘์ง€๋ฅผ ์„ ํƒํ•˜๋ฉด ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํ”„๊ฐ€ ๋๋‚˜๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” TOTAL ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.

  • $op ๋ฅผ "$op"๋กœ ๋„˜๊ฒจ์ค˜์•ผ ์—ฐ์‚ฐ๊ธฐํ˜ธ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•ด์„œ ์ œ๋Œ€๋กœ ์ž‘๋™

๊ฒฐ๊ณผ

์‹คํ–‰ ๋ฐฉ๋ฒ•

sh cal.sh

ํ™”๋ฉด

๊ถ๊ธˆํ•œ ์ 

  • -eq vs =
    ๊ฐ’์„ ๋น„๊ตํ•  ๋•Œ, -eq์™€ =์˜ ์„ฑ๋Šฅ์ด๋‚˜.. ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€? ์–ด๋–ค๊ฑธ ์“ฐ๋Š”๊ฒŒ ์ข‹์€์ง€?

+ Recent posts