티스토리 뷰

이번 시간에는 쉘, 쉘 스크립트 프로그래밍, cron & at 명령어에 대해 배웠다.

 

-새로 배운 내용

 

| shell (쉘, 셸) | 사용자의 명령을 해석하여 커널에게 전달

| Shell script | 명령어 집합! 주기적으로 해야 하는 명령들의 집합 -> 복잡한 명령어들을 저장해뒀다가 필요한 경우에 쓸 경우 유용

| bash | 우분투에서 기본으로 사용하는 쉘.

alias 기능 / history 기능 / 연산 기능 / 명령 편집 기능 등...

 

-쉘의 명령문 처리 방법

(프롬프트) 명령 [옵션..] [인자..]

 

-환경 변수 : 미리 설정되어 있는 값!

$환경변수이름

ex) $USER (현재 사용자 이름), $HOME(현재 사용자 홈디렉터리 표시), $PWD (사용자의 현재 작업 디렉터리 표시)


-쉘 스크립트 프로그래밍

 

출력 명령 : echo 

스크립트 파일 실행 : sh [스크립트명] 

변수 : 변수에 넣는 모든 값은 '문자열'로 취급! 숫자로 사용시 expr 키워드 사용, 수식은 ` 로 묶기. 대소문자 구분, 대입 연산자 '=' 좌우에는 공백X 

 

-조건문 -> [ condition ] 안의 각 단어 사이 공백이 있어야 함!

 

if문)     if [ condition ]; then                                                 if [ condition ] 

              ....                                                                        then        

          fi                                               =                                      ....

                                                                                          fi

 

 

 

case문)

 

case variable in

      pattern1 [ | pattern2 | ...] ) ... ;;

      pattern3 [ | pattern4 | ...] ) ... ;;

      ...

      *) ... ;;

esac

 

* 파일의 앞에 n번째 줄까지만 출력하고 싶은 경우 : head n $변수명

 

-반복문 (for, while문)

 

for variable in range; do                                         while [ condition ]; do

....                                                                         ...

done                                                                    done

 

-사용자 정의 함수 만들기 가능 : 함수 호출 시 파라미터를 붙여 사용

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

| export | 외부 변수로 선언. 선언 변수를 타 프로그램에서도 사용 가능!

 

 

- cron VS at

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

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

 

 

-문제 발생 및 고민한 내용

 

실습을 따라하던 도중 조건문을 쓰는데 조건문이 인식이 안되어 파일이 실행되지 않았다.

이는 if와 [ 사이에 공백이 있어야하는데 모르고 붙여썼기 때문에 발생한 문제였다.

if문을 사용할 때는 if와 [ 사이에 공백이 꼭 있어야 함을 명심하자!

 

-참고

하드웨어, 커널, 쉘 간의 관계와 개념에 대해 자세히 설명해주는 영상이 이번 수업 내용을 이해하는데 도움이 될 것 같아 링크를 첨부했다!

https://www.youtube.com/watch?v=HYQ65yUlJDg

 

-회고

이번 시간에는 쉘에 대해 전반적인 내용을 다뤘다.

쉘은 '터미널'과 같이 명령어를 입력하는 환경이다. 내가 매일 실습할 때 터미널을 사용하면서

쉘의 도움을 정말 많이 받고 있음을 깨달았다. 스크립트 환경에서 프로그래밍을 할 수 있는 것이 신기했다.

C++을 배우면서 리눅스를 함께 배워보니 비슷한 부분이 많으면서도 차이가 많음을 알았다. 이를 비교해가며 실습하는 과정이 재밌었다. 그 중 가장 재밌는 것은 환경변수였다. 이미 설정이 되어있어 내가 필요한 변수만 입력하면 정보들이 쫙 나오는 것이 신기하고 편리했다. 쉘 스크립트를 이용해 명령어들을 보관하고, 프로그래밍을 할 수 있음을 실습하며 쉘 스크립트의 장점들을 몸소 느낄 수 있는 시간이었다. :)

 

-실습과제

 

: 인터넷에서 유용한 bash script 를 하나 선정하여, 유용한 이유, 해당 스크립트 설명, 실행 결과를 작성하시오. 

 

https://5log.tistory.com/65

위 포스팅의 많은 코드 중 '계산기 프로그램'을 분석해보려고 한다. 이는 조건문 case문에 대한 쓰임을 잘 이해할 수 있는 코드이기에 선정해보았다. 뿐만 아니라 if문 사용법 및 변수를 상수로 쓰기 위해선 expr 을 입력해줘야하는 것, 상수로 쓰고 싶은 경우엔 $을 변수명 앞에 붙여야 한다는 것을 예제를 통해 배울 수 있어 유용하기에 이것으로 정했다.

 

스크립트에 대한 설명은 주석문으로 달겠다.

 

# vi calculator.sh

 

 #!/bin/bash

//echo : 출력을 가능하게 해주는 명령어

echo -n "Enter A : " 

read A // read 명령어를 이용해 키보드  입력을 받아 옴

echo -n "Enter B : "

read B

//옵션 -n 은 새로 개행하지 않고 그대로 출력하라는 의미.

 

 

echo "--------------------------------------------------------------"

echo "  (1) +   (2) -   (3)   *  (4)   / "

echo " -------------------------------------------------------------"

 

echo -n "Enter your choice :"

read C

 

case $C in  //변수 값을 사용하기 위해서 변수명 앞에 $를 붙여 사용!!

  1) echo " A + B = `expr $A + $B ` " ;; // 숫자로 사용하기 위해서는 expr 키워드 사용. ` `로 묶는다.

  2) echo " A - B = `expr $A - $B ` " ;;

  3) echo " A * B = `expr $A \* $B ` " ;;

  4) if [ $B - eq 0 ] ; then

         echo "Wrong B "

      else

         echo " A / B = `expr $A + $B ` "

      fi;; // if문이 끝나면 fi를 기재해 끝을 알림!

   *) echo " Wrong Number" ;;

// *) : 나머지

esac // case문 끝남을 알림.

 

이 코드를 기반으로 Server(B) 환경에서 계산기 프로그램 스크립트를 작성하고 실행해봤다.

실행 결과는 다음과 같다.

잘 동작 됨을 확인할 수 있었다.