Linux/실습 기록

[컴퓨터시스템관리] 2021.04.13 7주차 실습 일지 - 쉘 스크립트 프로그래밍

daeunnniii 2021. 4. 13. 18:58
728x90
반응형

실습 과제

• 유용한 bash script 를 하나 검색하여, 유용한 이유, 해당 스크립트 설명, 실행 결과를 작성하세요.

-내가 선택한 bash script는 계산기 프로그램이다. 오늘 수업 시간에 배웠던 변수 값을 키보드로 입력 받기, 산술 연산 시 expr 키워드 사용, case문, 그리고 *를 출력하기 위해서는 앞에 \(백슬래시)를 추가하는 등등의 개념을 잘 복습할 수 있을 것 같아 코드를 선정하였다.

 

먼저 echo -n "출력 문자열"에서 -n 옵션라인 끝에서 new line을 제외시킨다는 옵션이다. 즉, 다음 라인이 아닌 출력 문자 바로 뒤에서 number_1 변수를 입력받는다.

마찬가지로 number_2 변수도 입력받는다.

같은 방법으로 "Enter your choice: " 문자열 출력 후 input 변수를 입력받는다. input 변수 값이 1, 2, 3, 4, 그리고 4가 아닌 경우로 case를 나누어 조건문을 작성한다. 산술 연산을 할 때는 expr 키워드를 사용한다.

(여기서 주의해야할 것은 괄호나 *을 출력하기 위해선 앞에 \(백슬래시)를 붙여주어야한다!!)

input 값에 따라 계산한 값을 출력한다.

 

실행 결과

 

새로 배운 내용

1. Shell

1) shell

 사용자의 명령을 해석하여 커널에 전달 (커널과 사용자 사이의 다리 역할)

2) shell script

 과정이 복잡하여 하나라도 빠지면 문제가 생기거나, 매일 또는 주기적으로 해야하는 명령의 집합.

3) Bash(Bourne Again SHell)

• bash: 1989년, 브라이언 폭스(Brian Fox)가 발표한 유닉스 셸로, 우분투에서 기본으로 사용

bash 특징

- alias 기능 (명령 단축 기능), History 기능, 연산 기능, Job Control 기능, 자동 이름 완성 기능, 프롬프트 제어 기능, 명령 편집 기능 등등

환경 변수: ech $환경변수이름

4) Shell Script Programming 실습

환경 변수를 이용하여 정보 출력

- 사용자의 이름(USER), 운영체제 타입(OSTYPE), 로그인해서 사용하는 셸 (SHELL) 을 출력하는 스크립트를 작성하시오.

• 변수

- 키보드로 값을 입력하면, 입력한 값을 var 변수에 저장한 뒤, 화면에 출력하는 스크립트를 작성하시오.

- 파라미터 변수를 이용하여 스크립트 실행시 하나의 문자열을 입력받은 뒤, 그 대로 화면에 출력하는 스크립트를 작성하시오.

- 2개의 변수 (num1, num2)에 100과 200을 저장하고, sum변수에 num1과 num2의 합을 저장하여, sum을 출력하는 스크립트를 작성하시오.

`expr $num1 + $num2`으로 작성해야 300으로 출력됨

$num1+$num2만 작성하면 100+200으로 출력됨

 

$1을 출력 ($0: parameter.sh)

• 조건문

- 조건문의 산술 비교에서는 부등호(<, >)와 등호(=)를 활용하는 것이 아니라 -eq, -ne, -gf 등을 활용

tmp.txt 파일이 존재하면 참                                                            100과 200은 다르므로 거짓

 

- case문에는 *(와일드카드) 를 사용할 수 있다

- 내용을 확인하고 싶은 파일 이름을 입력받아서, 해당 파일이 존재하면, 앞 5줄을 출력하는 스크립트를 작성하시오.

• 반복문

- 현재 디렉터리에 있는 셸 스크립트 파일(*.sh)의 파일 이름과 앞 3줄을 출력하는 스크립트를 작성하시오.

- 비밀번호를 입력받아서, 비밀번호(1234)가 맞을 때까지 계속 입력받는 스크립트를 작성하시오.

• 사용자 정의 함수

-함수를 호출할 때 파라미터를 붙여서 사용할 수 있음

ex) myfunc "world"로 myfunc를 호출 => echo "hello $1" => hello world

 

-myfunc()에서 myresult 변수를 지역변수로 선언했으므로 아래의 myresult는 출력되지 않음

=>echo $result 에서만 출력됨

 eval : 문자열을 명령어로 인식하고 실행

 export : 외부 변수로 선언. 선언한 변수를 다른 프로그램에서도 사용할 수 있음

set과 $(command): 리눅스 명령을 결과로 사용하려면 ‘$(command)’형식을 사용. 결과를 파라미터로 사용할 때 set 사용

 shift : 파라미터 변수를 왼쪽으로 한 단계씩 아래로 이동 시킴

 

사용자 계정 여러개 만들기 (adduser-script.sh)

1) 사용자 계정 및 패스워드가 입력되었는지 확인 / 만약 입력하지 않았다면 입력하라는 메세지 출력

2) 사용자 계정이 이미 있는지 확인한 후 사용자 생성 및 패스워드 설정

$(cat /etc/passwd | grep ${userList[$i]} | wc -l)가 0이면 사용자 계정이 없는 것!

- 배열 변수이면 { } 중괄호 안에 작성

- wc: word count의 약자로, 주어지는 파일 또는 표준 입력의 바이트, 문자, 단어 그리고 줄(라인) 수를 출력해주는 명령어

- wc -l : 줄(라인 또는 개행문자)의 수를 출력

 

 

2. 작업예약 - cron & at

1) date: 현재 설정된 로케일(locale) 과 타임존(time-zone) 에 따라 현재 시각을 보여주는 리눅스 명령어

 

2) cron: 주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약하는 것

• 매월 15일 새벽 3시 1분에 ‘/home’ 디렉터리와 그 하위 디렉터리를 ‘/backup’ 디렉터리에 백업

3) at: 일회성 작업을 예약하는 것

 

• 내일 새벽 4시에, 시스템을 최신 패키지로 업데이트 하고 재부팅하기

atrm 작업번호로 예약 작업 취소 가능!!

 

문제가 발생하거나 고민한 내용 & 해결과정

▶문제 발생

-변수를 초기화할 때 var = ""로 스페이스바를 누를 경우 에러가 발생했다. 변수를 선언할 때 스페이스바를 누르지 않았을 때 var 색깔이 변하는 것을 알 수 있었다.

▶해결 과정

-대입연산자 ‘=‘ 좌우에는 공백이 없어야 한다!!

 

 

참고한 자료들

-아래는 실습 과제를 하면서 찾아보았던 자료들이다. 나중에 쉘 스크립트를 작성하는 데에 참고하면 좋을 것 같아 남겨 두었다.

dazemonkey.tistory.com/110

 

Linux 쉘스크립트 문법 및 예제

리눅스(Linux), 유닉스(Unix) 종류에 따라 기본적으로 지원되는 쉘이 다르다. RHEL/CentOS는 기본적으로 배시쉘(Bash)을 사용하고, SunOS/Solaris는 본쉘(sh)을 사용한다. 현재 시스템에 설정되어 있는 쉘을

dazemonkey.tistory.com

 

www.hooni.net/xe/study/578

 

[unix] 쉘 스크립트 예제 모음 - 후니넷

유닉스 쉘스크립트 간단 예제 모음<메타문자 사용가능 명령어>유닉스 시스템에서는 % cp *.c *.pas같은 명령어를 사용할 수 없다.유닉스에서는 메타문자(*, ? 등)가 해당되는 문자로 확장되서 작동

www.hooni.net

lowid.tistory.com/entry/%EA%B0%84%EB%8B%A8%ED%95%98%EC%A7%80%EB%A7%8C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EC%89%98%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8

 

간단하지만 유용한 쉘스크립트.

엄청나게 간단하지만, 꽤 쓸만한 녀석들 모음입니다. 소스는 하도 간단해서 별로 설명할것도 없네요... 첫번째 스트립트는 터미널 영한사전처럼 간단하게(앞부분만) 위키 내용을 보여주는것. 다

lowid.tistory.com

회고(+,-,!)

-리눅스를 사용할 때 가장 중요한 부분 중 하나인 쉘 스크립트를 작성하는 법에 대해 자세히 배울 수 있었다.

-변수, 조건문, 반복문을 활용한다는 것은 C나 Java, python 등의 언어와 같았지만, 반면에 다양한 차이점도 존재한다는 것을 느꼈다. shell script를 작성할 때는 모든 값을 문자열로 취급해서 산술 연산을 할 때 expr 키워드를 `백 쿼트와 함께 사용해야하고, 대입연산자 = 좌우에는 공백이 없어야하는 등 스크립트를 작성할 때 신경써야하는 부분들을 알게 되었다.

-동일한 명령어들을 여러 번 반복해야할 때 쉘 스크립트를 활용한다면 더욱 쉽고 빠르게 반복할 수 있다는 점이 흥미롭게 느껴졌다.

-또한 작업을 자동화하고, 예약할 수 있는 cron과 at에 대해 배웠다. 굳이 신경 쓰지 않아도 주기적으로 자동 백업을 시킬 수 있다는 점에서 유용하게 쓰일 것 같다는 생각이 들었다.

 

 

 

 

 

 

 

 

 

728x90
반응형