구현
개요
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
와=
의 성능이나.. 차이가 있는지? 어떤걸 쓰는게 좋은지?