실습 과제
• 유용한 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으로 출력됨
• 조건문
- 조건문의 산술 비교에서는 부등호(<, >)와 등호(=)를 활용하는 것이 아니라 -eq, -ne, -gf 등을 활용
- 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 색깔이 변하는 것을 알 수 있었다.
▶해결 과정
-대입연산자 ‘=‘ 좌우에는 공백이 없어야 한다!!
참고한 자료들
-아래는 실습 과제를 하면서 찾아보았던 자료들이다. 나중에 쉘 스크립트를 작성하는 데에 참고하면 좋을 것 같아 남겨 두었다.
회고(+,-,!)
-리눅스를 사용할 때 가장 중요한 부분 중 하나인 쉘 스크립트를 작성하는 법에 대해 자세히 배울 수 있었다.
-변수, 조건문, 반복문을 활용한다는 것은 C나 Java, python 등의 언어와 같았지만, 반면에 다양한 차이점도 존재한다는 것을 느꼈다. shell script를 작성할 때는 모든 값을 문자열로 취급해서 산술 연산을 할 때 expr 키워드를 `백 쿼트와 함께 사용해야하고, 대입연산자 = 좌우에는 공백이 없어야하는 등 스크립트를 작성할 때 신경써야하는 부분들을 알게 되었다.
-동일한 명령어들을 여러 번 반복해야할 때 쉘 스크립트를 활용한다면 더욱 쉽고 빠르게 반복할 수 있다는 점이 흥미롭게 느껴졌다.
-또한 작업을 자동화하고, 예약할 수 있는 cron과 at에 대해 배웠다. 굳이 신경 쓰지 않아도 주기적으로 자동 백업을 시킬 수 있다는 점에서 유용하게 쓰일 것 같다는 생각이 들었다.
'Linux > 실습 기록' 카테고리의 다른 글
[컴퓨터시스템관리] 2021.04.27 9주차 중간 과제 (0) | 2021.04.28 |
---|---|
[컴퓨터시스템관리] 2021.04.20 8주차 실습일지 - First Half Review (0) | 2021.04.25 |
[컴퓨터시스템관리] 2021.04.06 6주차 실습 일지 - Linux 디스크 관리(2) (0) | 2021.04.06 |
[컴퓨터시스템관리] 2021.03.30 5주차 실습 일지 - Linux 디스크 관리 (0) | 2021.03.30 |
[컴퓨터시스템관리] 2021.03.23 4주차 실습 일지 - x window (0) | 2021.03.23 |