쉘 스크립트 - 1

2021. 6. 2. 22:39

1. 쉘 스크립트 사용하는 경우
 - 시스템을 사용하여 환경설정 시
 - 어플리케이션 설치
 - 정기적 시스템 상태 체크
 - 여러 시스템에 동일한 작업 진행시

2. 쉘 스크립트 만들기
 - 시작시 메타기호인 #와 함께 해당파일이 쉘스크립트임을 알려준다.
   ex) bash 쉘의 경우, #!/bin/bash
 ** 메타문자(기호) : 쉘에서 정의한 특수한 의미를 가지는 특수기호
     ex) #: 주석, $: 쉘변수

3. 변수선언
 - 변수 선언시 '=' 양 옆을 띄어쓰기하면 안된다.
    ex) language="aa" -> 변수 정상 정의됨, language = "aa" -> 변수 정의 불가
 ** 예약변수, 환경변수
    - 시스템에서 사용하기 위해 사전에 정의하고 사용하고 있는 변수를 예약변수, 혹은 환경변수라한다.
    - 사전에 정의했으니 예약변수, 시스템 환경설정을 위해 사용하니 환경변수라고 한다.

4. 함수선언
 - 함수는 function으로 시작한다.
 - 선언
   ex)
    function aa()
    {
      ~~
    }
 - 사용: 함수명 매개변수 -> 함수명만 들어간다
   ex)
    aa "bb"

5. 전역변수와 지역변수
 - 함수 밖에 선언된(스크립트 파일에 바로 선언된) 변수는 전역변수이며,
   스크립트 전체에서 변수에 저장한 값을 사용할 수 있다.
 - 함수 내에서 선언한 변수를 지역변수라 하며, 함수 내에서만 유효하다.
   사용시 local 이라는 단어를 선언한다.
   ** 굳이 local을 선언하지 않아도 블럭({, })에 의해 막혀있어 기능 상 문제는 없다. 하지만 명확한 선언을 위해 local을 붙이는 것이 좋을 듯 하다

6. 위치 매개변수
 - 스크립트 실행시 인자로 받는 파라미터
 - $0: 스크립트 이름
 - $숫자: 매개변수, 10부터는 {}를 추가해야함 ex) ${10}
 - $*: 전체 매개변수를 의미, "$*"의 경우 각 매개변수를 모두 합쳐 1개의 매개변수로 인식
 - $@: 전체 매개변수를 의미, "$@"의 경우 ""로 되어있는 문장을 하나의 매개변수로 인식
       (보통 ""의 경우 내부에 스페이스가 있을 경우 개별의 매개변수로 인식)
 - $#: 입력받은 매개변수의 총 개수
   
7. 특수 매개변수
 - $$: 현재 스크립트 혹은 현재 실행중인 명령어의 PID
 - $?: 최근에 실행한 명령어, 함수, 스크립트의 실행결과
 - $!: 최근에 백그라운드로 실행한 명령어의 PID
 - $-: 현재 옵션 플래그

8. 변수사용
 - $변수 : 해당 변수의 값으로 치환
 - ${변수} : 문자열과 문자열사이에서 변수를 구분하기 위해 {}를 통해 명확하게 정의

9. 확장 변경자
 - 조건에 따라 변수를 초기화하거나 특정 값을 할당하기 위해 사용한다.
 - ${변수-문자열}: 변수에 값이 정의되지 않은 경우 ${}의 결과 값을 해당 문자열로 치환한다
 - ${변수:-문자열}: 변수에 값이 정의되지 않거나 NULL(="") 값일 경우 ${}의 결과 값을 해당 문자열로 치환한다
 - ${변수=문자열}: 변수에 값이 정의되지 않은 경우 해당 문자열을 변수에 저장하고 ${}의 결과 값을 해당 문자열로 치환한다
 - ${변수:=문자열}: 변수에 값이 정의되지 않거나 NULL(="") 값일 경우 해당 문자열을 변수에 저장하고 ${}의 결과 값을 해당 문자열로 치환한다
    ** -와 =의 차이는 실제로 변수에 해당 문자열을 저장안함/저장함
 - ${변수+문자열}: 변수에 값이 정의된 경우 해당 값을 반환하며, 아닌경우 ${}의 결과 값을 해당 문자열로 치환한다
 - ${변수:+문자열}: 변수에 값이 정의되어 있으며 해당 값이 NULL이 아닐경우 ${}의 결과 값을 해당 문자열로 치환한다
 - ${변수?에러메세지}: 변수에 값이 정의되어 있지 않을 경우 에러메세지를 출력, 정의되어 있으면 해당 값을 반환
                       (NULL 값은 정상적으로 값이 정의된 것으로 판단한다)
 - ${변수:?에러메세지}: 변수에 NULL 이외의 값이 정의되어 있으면 해당 값을 반환, 그 이외의 경우 에러메세지 출력 및 해당 쉘 종료
                        (보통 스크립트나 명령어 실행시 서브쉘에서 실행하기 때문에 해당 서브쉘이 종료된다)
    ** 에러메세지를 생략하면 기본적인 에러메세지가 출력된다.
 - ${변수:시작위치}: 변수 값이 문자열일 때 시작위치부터 끝까지 해당 문자열을 출력
 - ${변수:시작위치:길이}: 변수 값이 문자열일 때 시작위치부터 길이까지 해당 문자열을 출력
    ** 시작위치의 값이 +는 해당위치 이후 부터, -는 해당위치를 포함하고 이다


10. 문자열관련 매개변수 확장자
 - ${변수#패턴}: 문자열을 앞에서 부터 검색, 처음 찾은 패턴 앞의 모든 문자열 제거
 - ${변수##패턴}: 문자열을 앞에서 부터 검색, 마지막으로 찾은 패턴 앞의 모든 문자열 제거
    ** '*'를 패턴 앞에 붙여야함
 - ${변수%패턴}: 문자열을 뒤에서 부터 검색, 처음 찾은 패턴 뒤의 모든 문자열 제거
 - ${변수%%패턴}: 문자열을 뒤에서 부터 검색, 마지막으로 찾은 패턴 뒤의 모든 문자열 제거
    ** '*'를 패턴 뒤에 붙여야함
 - ${#변수}: 변수(문자열)의 길이를 반환
 - ${변수/찾을문자열/바꿀문자열}: 변수를 앞에서 부터 검색, 처음으로 찾을 문자열과 일치하는 부분을 바꿀 문자열로 변경
 - ${변수/찾을문자열/바꿀문자열}: 변수에 저장된 모든 문자열에서 찾을 문자열과 일치하는 부분을 바꿀 문자열로 변경
 - ${변수/#찾을문자열/바꿀문자열}: 변수의 문자열이 찾을 문자열로 시작하면 바꿀문자열로 변경
 - ${변수/%찾을문자열/바꿀문자열}: 변수의 문자열의 제일 마지막 물자열이 찾을 문자열과 일치하면 바꿀문자열로 변경

'Study > Shell' 카테고리의 다른 글

쉘 스크립트 - 4  (0) 2021.07.19
쉘 스크립트 - 3  (0) 2021.06.23
쉘 스크립트 - 2  (0) 2021.06.06
책으로 공부시작  (0) 2021.06.01
쉘 프로그래밍 - 1  (0) 2021.05.20

+ Recent posts