이번 포스팅에서는 간단한 bash 스크립트 짜기로 마무리하겠습니다.
1. 파일 생성과 실행
touch [파일명]으로 먼저 파일을 생성해도 되지만, vi [파일명]으로 생성과 동시에 수정하는 것이 더 편합니다. 리눅스는 확장자를 구분하여 실행 프로그램을 연결하지 않기 때문에 통상적으로 확장자를 쓰지 않지만 쉘 스크립트는 뒤에 .sh를 붙여 명시해줍니다. 저는 coffee라는 이름의 쉘 스크립트를 짤 것이기 때문에 vi coffee.sh를 입력했습니다.
그럼 coffee.sh라는 새로운 파일이 생성되며 편집기가 실행됩니다.
쉘 스크립트에서는 항상 가장 먼저 입력해야 할 첫 라인이 정해져 있습니다. bash를 기준으로 하면, '#! /bin/bash' 인데요. '#'으로 시작해서 주석인 것 같지만, 이는 스크립트를 실행할 쉘을 지정하는 선언문입니다. 이 스크립트는 bash를 통해 실행시킬 것이라고 명시를 하고 그 다음 라인부터 프로그래밍를 하면됩니다.
일단 이렇게 적고 :wq를 통해 저장하고 나오겠습니다. 물론 지금은 짠 게 없기 때문에 의미가 없지만, 스크립트 파일을 만들고 나서는 chmod 명령어를 통해 파일의 실행 권한을 설정해주어야 합니다. chmod는 'change mode'라는 뜻의 명령어로, 인수로 오는 파일의 권한을 지정합니다.
chmod 755 라고 쓴다면 755는 rwxr-xr-x를 뜻하므로, 파일의 소유자에게는 읽기/쓰기/실행의 권한을, 소유 그룹과 그 외에게는 읽기/실행의 권한을 허가한다는 의미입니다. 인수인 coffee.sh를 붙여 chmod 755 coffee.sh라고 지정해줍시다.
이렇게 파일이 만들어졌습니다. 실행시킬 땐 파일명 앞에 ./를 붙여 ./coffee.sh를 입력하면 됩니다.
(2) 계산기 프로그램 만들기
1. 동작 방식
calc.sh라는 이름의 이 파일은 기본적으로 3개의 파라미터를 받습니다. 3개의 파라미터는 순서대로 숫자, 연산자, 숫자여야 하며 그렇지 않으면 에러를 출력합니다.
2. 사용자 이름과 현재 시간 출력
calc.sh가 실행되면 가장 먼저, 이 프로그램을 실행하는 사용자 계정의 이름과 실행되는 시간을 연도-월-일_시_분_초 형식으로 출력합니다.
사용자 계정 이름은 미리 지정되어 있는 환경 변수인 $USERNAME을 사용하였고, 시간 출력은 date를 사용해 형식을 맞춰주었습니다.
3. Input과 Output 출력
그 다음으로는 사용자가 입력한 파라미터인 계산 대상 수식과 그 수식의 계산 결과 값을 출력합니다.
이 때 Input을 출력하는 부분은 파라미터 전체를 출력해주는 $@을 이용하였습니다. 연산자는 두 번째 파라미터로 받아오는데 이는 $2를 통해 사용할 수 있습니다. $2가 어떤 연산자인지 case를 돌렸고, 각 연산자에 맞는 계산을 expr을 통해 연산했습니다.
- expr
- 문자열을 식으로 인식하여 계산
- `(backtick)으로 꼭 묶여야 하며
- 각 항들 띄어쓰기로 분리되어야 함
또한, 곱셈 연산은 앞에 탈출 문자인 \를 붙여 '\*'로 연산해주어야 합니다. 하지만 편의성을 위해 입력은 'x'로 받았습니다.
4. 계산 시간 출력
프로그램이 끝나면 마지막으로 연산 시간을 출력합니다.
이 부분은 프로그램 가장 처음과 가장 끝에 현재 초, 나노초를 저장하는 변수인 $Start, $End를 선언하고 그 차이를 계산하는 $Elasped를 통해 출력한 결과입니다. 이때도 expr을 사용했습니다.
5. 전체 코드와 실행 결과
- 전체 코드
- 실행 결과
시간 표현에 대해서는 아래를 참고하세요.
www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/
'SYSTEM' 카테고리의 다른 글
Service와 Daemon의 차이 (0) | 2021.03.25 |
---|---|
LDAP이란 무엇인가 (0) | 2021.03.18 |
bash (2) 환경 변수 설정 (1) | 2021.03.10 |
bash (1) alias (별칭/단축키) 설정 (0) | 2021.03.10 |
useradd/adduser 안쓰고 직접 파일 수정하여 계정 생성하기 (0) | 2021.03.09 |