구현

개요

Bash로 작성된 간단한 계산기 스크립트입니다. 사용자로부터 두 개의 숫자와 연산자를 읽고 계산을 수행한 다음 사용자가 중지를 선택할 때까지 이전 계산의 결과로 계산을 계속할 수 있습니다.

사용 언어

bash, shell script

코드 및 함수

스크립트는 나중에 사용자 입력의 유효성을 검사하는 데 사용되는 두 개의 정규식 REGEX_NUMBERREGEX_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=의 성능이나.. 차이가 있는지? 어떤걸 쓰는게 좋은지?

git clone, .zshrc 설정 등 다 했는데도 파일에 색이 하나도 안 칠해져있었다.

 

참을 수가 없어서 구글링 엄청 하다가 드디어 해결 방법을 찾았다..

처음 맥북 샀을 때도 이랬던거 같은데 다음에 또 필요할 때를 위해서 남겨야겠다..

 

ls -alh

를 해서 .vimrc 가 있는지 확인한다.

 

아마 없을 것이다..

 

vi .vimrc

로 파일을 생성해서

 

syntax on 을 쓰고 저장하면

색이 잘 나오는 것을 확인할 수 있다!

매일 오전 10시에 멘토님과 스크럼을 진행한다. 스크럼을 들어본 적은 많지만 실제로 해보는 건 처음이어서 이번 기회에 관련 용어와 특징을 간단히 정리해보고자 한다.

스크럼이란?

스크럼은 럭비에서 경기가 잠시 중단되었을 때 양 팀 선수들이 공을 중간에 놓고 서로 어깨를 밀착하여 형성하는 전술 대형을 가리키는 말입니다.

 

출처 rugbytoday

오늘날에는 애자일 기법 중 하나로 점진적이고 반복적인 개발 방법을 뜻합니다.

주요 개념

출처 위키백과

제품 책임자(project owner)

  • 제품 백로그를 관리하는 사람으로 단 한 명이어야 함
  • 제품 백로그 항목의 우선순위를 결정하고, 매 스프린트 결과를 검토하여 우선순위를 지속적으로 관리

스크럼 마스터(scrum master)

  • 일일 스크럼 회의(daily scrum meeting)를 주관하여 진척도를 모니터링, 팀의 생산성에 악영향을 미치는 정책 절차 구조를 공론화하여 처리
  • 업무를 지시 통제 하지 않고, 자원을 지원하거나 장애물을 제거하는 조력자 역할

스프린트(sprint)

  • 과제가 진행되는 주기, 1~4주로 구성
  • 하나의 스프린트가 끝나면 바로 다음 스프린트 시작
  • 스프린트 진행 중에 기간, 과제 가감 등의 변경 불가능

제품 백로그(product backlog)

  • 제품의 모든 요구사항을 우선순위에 따라 나열한 목록
  • 사업 환경이나 변화에 따라 지속적으로 변경 가능

스프린트 백로그(spring backlog)

  • 하나의 스프린트 동안 완료할 과제 목록

진행 방식

  • 매일 15분 정도, 스탠드업 형식
  • 컨디션 공유로 시작
  • 어제 한 일 -> 오늘 할 일 -> 이슈 순으로 진행

 

1. bash 커맨드

ls

현재 디렉토리 파일 목록 나열

  • ls -F : 파일과 디렉토리를 구분하여 출력
  • ls -a : 숨겨진 파일, 디렉토리도 함께 출력
  • ls -l : 자세한 내용
  • ls -al : a와 l의 기능 모두 포함
  • ls -h -al : 파일크기도 함께 출력
  • ll : 한 줄씩 파일의 상세 정보

mv

파일 또는 디렉토리의 이동 또는 이름 변경

  • mv [원본 파일명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 파일 이동
  • mv [원본 파일명] [바꾸고 싶은 파일명] : 원본 파일 이름 변경
  • mv [원본 디렉토리명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 디렉토리 이동
  • mv [원본 디렉토리명] [바꾸고 싶은 디렉토리명] : 원본 디렉토리 이름 변경

cp

파일 또는 디렉토리의 복사

  • cp [원본 파일명] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 원본 파일 복사
  • cp [원본 파일명] [복사해서 만들고 싶은 디렉토리명] : 해당 디렉토리로 사본 파일 복사
  • cp [원본 파일명1] [원본 파일명2] [옮기고 싶은 디렉토리명] : 해당 디렉토리로 여러 파일 한번에 복사
  • cp [원본 디렉토리] -r [옮기고 싶은 디렉토리명] : 원본 디렉토리의 하위 파일까지 모두 해당 디렉토리로 복사
  • cp [원본 디렉토리] -r [복사해서 만들고 싶은 디렉토리명] : 복사해서 만들고 싶은 디렉토리 생성

cat

두개 이상의 파일 전체 내용 출력

  • cat [파일명1] [파일명2] : 두개 이상의 파일을 연속으로 출력
  • cat -n [파일명1] [파일명2] : 두개 이상의 파일을 연속으로 출력

tail

파일을 지정한 행까지 출력 (디폴트 : 10개 행)

  • tail [파일명]
  • tail -n 숫자 [파일명] : 마지막 행부터 해당번째 행 출력
  • tail +숫자 [파일명] : 해당번째 행부터 마지막 행까지 출력

rm

파일 또는 디렉토리 삭제

  • rm [파일명] : 해당 파일 삭제
  • rm *.[확장자] : 해당 확장자로 끝나는 모든 파일 삭제
  • rm * : 전체 파일 삭제
  • rm -r [파일명/디렉토리명] : 해당 파일/디렉토리 삭제
  • rm -rf [파일명/디렉토리명] : 해당 파일/디렉토리 강제 삭제 (경고문구 없음)


아래 내용들은 추가 공부 필요


nohup

터미널을 종료해도 프로그램이 백그라운드에서 계속 실행되도록 함


chown

파일이나 디렉토리의 소유권자 및 그룹식별자 변경


chmod

해당 파일이나 디렉토리의 퍼미션 수정


grep

정규표현식의 패턴을 사용해서 특정 파일 내에 해당 패턴의 문자열 출력


ps

현재 작동하는 프로세스 목록 출력


기타

알고 있거나 참고할 만한 것들


  • cd
  • pwd
  • clear
  • mkdir
  • touch
  • history history -c
  • bash -x ./[파일명] : 디버그

2. vi 편집기 모드

  • 기본 모드
    • vi 편집기 처음 열었을 때 화면
  • 입력 모드
    • i, a를 통해 기본에서 입력 모드로 전환
    • esc를 통해 입력에서 명령 모드로 전환
  • 명령 모드
    • : (콜론)을 통해 명령
    • 파일 저장, 종료 또는 검색 등을 함

3. vi 커맨드

  • esc + 명령어 입력

명령 모드에서 입력 모드로 전환

  • i : 현재 커서 앞(왼쪽)에 입력
  • a : 현재 커서 다음(오른쪽)에 입력

저장, 종료

  • :q : 종료
  • :q! 강제 종료 (저장 X)
  • :w : 저장 (종료 X)
  • :wq : 저장 및 종료
  • ** 비정상 종료 시 .swp 파일이 생성된다. 필요하지 않은 경우 삭제한다.

커서 이동

  • h, j, k, l : 좌, 하, 상, 우 이동
  • w : 다음 단어의 첫 글자로 이동
  • b : 이전 단어의 첫 글자로 이동

줄 이동

  • gg : 첫번째 행으로
  • G : 마지막 행으로
  • :숫자 : 지정한 숫자 행으로 이동

삭제

  • x : 현재 커서 위치에 있는 한 글자 삭제
  • dd : 현재 커서 위치에 있는 한 행 삭제
  • dw : 현재 커서 위치에 뒤에 있는 단어 삭제 (커서 포함)
  • db : 현재 커서 위치에 앞에 있는 단어 복사
  • ** 삭제된 내용은 붙여넣기 가능 (버퍼에 저장됨)

복사

  • yy : 현재 커서 위치에 있는 한 행 복사
  • yw : 현재 커서 위치에 뒤에 있는 단어 복사
  • yb : 현재 커서 위치에 앞에 있는 단어 복사

붙여넣기

  • p : 커서 다음에 붙여넣기
  • P : 커서 이전에 붙여넣기

찾기

  • /[검색어] : 앞에서부터 검색어를 찾음
  • /[검색어] : 뒤에서부터 검색어를 찾음
  • n : 뒤로 검색
  • N : 앞으로 검색

바꾸기

  • :%s/old/new : 각 행에 처음 나오는 old를 new로 변경
  • :%s/old/new/g : 모든 old를 new로 변경
  • :%s/old/new/gc : 모든 old를 new로 변경하기 전에 물어봄

기타

  • u : undo
  • ctrl+r : redo
  • :set nu : 행번호 출력
  • :set nonu : 행번호 숨기기
  • :set ts=4 : tap size를 4로 설정
  • :set title : 타이틀 바에 현재 편집 중인 파일을 표시



참고

https://velog.io/@zeesoo/Linux-vi-편집기-사용법-및-명령어

https://velog.io/@devmin/리눅스-쉘-기본-명령어Basic-Shell-Commands

+ Recent posts