๊ตฌํ
๊ฐ์
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
์ =
์ ์ฑ๋ฅ์ด๋.. ์ฐจ์ด๊ฐ ์๋์ง? ์ด๋ค๊ฑธ ์ฐ๋๊ฒ ์ข์์ง?