ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [따배쉘] 5.Bash shell script
    Linux 2022. 8. 25. 19:10

    ===

    https://youtu.be/onbFKxEEgHg

    5.Bash shell script

     

    ===

    script : 하나의 파일에 기존에 존재하는 명령어들을 집어넣어서 순차적으로 interpret해서 실행

    예)Shell script

    program : 소스코드를 하나의 파일에 넣고 컴파일러가 컴파일해서 바이너리로 만들어서 동작시키도록 해주는 것

    예)C, C++, Java

     

    ▽그냥 터미널에 한줄 한줄 씩 입력할 것을 스크립트로 쭉 써놓은 것인듯 한줄 한줄 해석하고

     

    ===

    Shell script

    Shell program이라고도 표현한다

    뭐지 Shell은 interpreter인데?

     

    Shell script : 리눅스 커맨드들을 모아놓고 순차적으로 실행하는 것

    Shell program : if, loop등 프로그램 문법을 집어넣어서 프로그램처럼 만들어놓은 것

    누가 딱 이렇게 정해놓은건 아니고 두개가 가능하구나 정도로 알아들으면 된다

     

    ===

     

    ===

    vi test.sh

    df -h /

     

    ===

    이렇게 만들어놓고 실행 퍼미션이 있어야 한다

    저기에 x가 있어야 해

    그리고 실행하면

    날짜와 함께 root Filesystem의 사용량을 출력해주는 script

     

    ===

    특별히 기능이 있다

    Shell script안에서

    #으로 시작하면 comment(설명)

    첫번째 줄 첫번째 컬럼에서 #!/bin/bash, #!/bin/csh 이렇게 쉘 이름을 넣어주면 셔뱅라인, 해시뱅라인이라고 부르고 script를 실행할 sub shell의 이름이다. 아무것도 안넣어주면 로그인쉘로 동작한다. 일반적으로 sub shell을 정한다

    sub shell로 동작

    top-down방식

     

    ===

    sub shell이란?

    bash가 shell을 만들어주는 프로그램. 바이너리 프로그램으로 존재한다

    vi test.sh하면 vi에디터가 실행되듯이

    /bin/bash하면 bash shell이 실행된다 - shell안에서 또 다른 shell을 실행할 수 있다 vi에디터 실행하듯이

     

    로그인 쉘과 구분해서 따로 실행한 쉘을 sub shell이라고 부른다

     

    ===

    /bin/bash에서 실행이 됨. sub shell상태다

    디렉토리를 이동하고 exit하면 sub shell이 종료되고, 그 shell자체가 없어진다

    그래서 종료 한 다음 pwd를 해보면 ~로 돌아와 있다(로그인쉘로 돌아옴)  ▽마치 커맨드창 하나 더 연거네?

     

    ===

    셔뱅, 해시뱅 : shell script를 실행하는데, sub shell을 만들어서 실행해줘 라는 말

    /bin/bash를 먼저 하는건데 #!를 붙이는 것

     

    ===

    예)

     

    ===

    shell script실행할 때 PATH라고 하는 환경변수를 잘 활용하면 좋다

    내가 어떤 디렉토리를 만들고 쉘스크립트를 그곳에 모아두고, 여기에 모아놓은 쉘 스크립트를 실행하기 좋게 하기 위해 PATH에 추가. 그러면 커맨드를 실행할 때 PATH 디렉토리에서 찾아서 실행, 없으면 다음, 다음.. 순차적으로 찾아 실행

     

    ===

    PATH=$PATH로 이전것을 가져온 뒤에 추가한다

    그리고 /home/ubuntu는 ~로 바꾸기 가능

    등록됐다

    그럼 이제 여기에다 쉘스크립트를 집어넣고 실행할 수 있다(▽어디서든 실행된다기 보다 경로 표시를 안해줘도 된다)

     

    ===

    오타 : %+Y 를 +%Y로 바꿔주기

     

    ▽cat > sample.sh : https://recipes4dev.tistory.com/177

     : 표준 입력으로 입력받은 내용을 파일에 쓰기 강의에서도 끝낼 때 Ctrl+D하셨어

     

    저렇게 주석 달아주면 좋다

     

    ===

    실행하려고 실행커미션

    이전엔 ./sample.sh라고 현재 디렉토리를 명시해줬어야 했는데

    PATH에 현재 디렉토리가 등록돼서 그냥 sample.sh라고만 해도 된다

     

    ===

    예2)

     

    df는 시스템 전체 디스크 공간

    du는 특정 디렉토리 디스크 사용량

    2>는 에러 메시지가 뜨면 /dev/null 에다가 버리는 것 = 정상적인 메시지만 보도록 하는 것

    echo하나 집어넣으면 빈 라인 하나 만들어준다

    ▽cat > varUsage.sh : cat이 어떤 내용을 받아서 뿌려주는건데, > varUsage.sh 했으니 저기다 뿌릴거고 키보드다 끝낼땐 Ctrl+D이고 vi같은 편집기에 익숙하지 않을 때 보통 사용한대

     

    콘솔에서 작업할 때 Ctrl+v가 안먹히면 Shift + Insert, shift+del은 잘라내기, Ctrl+Insert는 복사

     

    ===

    특정 디렉토리(/var) 사용량 모니터링 해주는것. 실행하려면 chmod +x 해주고

    실행해보면

     

    ===

    예3)

    ls > /tmp/날짜.txt

    이거를 스크립트로 해보기 문제내고 강의 끝

Designed by Tistory.