쉘 스크립트 - 1
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 |