728x90
4. 변수
- 변수 타입
- 쉘 변수들은 대문자로 정의하며 2가지의 변수 타입을 가지고 있음
- 전역 변수
- 전역 변수 또는 환경 변수들은 모든 쉘에서 사용할 수 있으며, env 명령을 사용하면 환경 변수들을 출력해볼 수 있음
- echo $PATH : /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 이런식으로 나오는데 쉘은 명령어를 찾을 때마다 이 디렉토리를 순서대로 검사함
- 추가하고 싶으면 vi ~/.bash_profile 에서 export PATH=$PATH:/path/to/add 로 추가
- 지역 변수
- 지역 변수는 현재의 쉘에서만 사용할 수 있음. 옵션 없이 set 빌트인 명령을 사용하면 환경 변수를 포함해 모든 변수들과 함수들의 목록을 보여줌
- 다음 변수는 배시 쉘 프로그래밍 부분에 작성(문자열 변수, 정수형 변수, 상수형 변수, 배열 변수)
- 변수 생성
- 변수들은 기본적으로 대문자로 생성. 숫자를 포함할 순 있지만 숫자로 시작할 수 없음
- = 앞뒤로 공백이 없어야 한다. VAR="value" 이런식!
- 변수를 출력할 경우엔 echo 를 사용. echo $VAR, echo "$VAR", echo "${VAR}" 모두 동일 기능 수행
- ★ 큰따옴표(““)를 쓰면 $str의 실제 값을 출력할 수 있고(변수의 값) 작은따옴표(‘‘)를 쓰면 그냥 $str이란 문자열 자체를 출력함!
- 밖에 큰따옴표를 쓰고 작은따옴표는 안에 쓰는 경우가 많음
4.1 지역 변수를 환경 변수로 만들기
- 현재 쉘에 만든 변수들은 현재 쉘에서만 사용할 수 있음. 이 경우 export 빌트인 명령을 사용하면 지역 변수를 환경 변수로 만들 수 있음
- 해제는 unset
- 자식 쉘에서 export 명령을 사용한다고 해서 부모 쉘에 영향을 주지는 못함
- ★ 특수 파라미터 변수들 (중요)
- $* : 1부터 시작하는 위치 파라미터의 확장, 큰 따옴표로 구분하고 IFS 특수 변수의 첫 문자로 구분되는 각 파라미터의 값 하나의 단어를 확장하며, 전체 파라미터값을 가짐 만약 IFS가 NULL이거나 해제되어 잇으면 파라미터는 스페이스로 구분
- $@ : 1부터 시작하는 위치 파라미터의 확장 큰 따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장, 전체 파라미터값을 가짐
- $# : 십진수의 위치 파라미터 전체 개수를 의미
- $? : 최근 실행된 포그라운드 파이프라인의 종료상태를 가지고 있음(0은 정상적으로 종료)
- $- : 실행하자마자 set 내장명령 또는 쉘 자체에 의해 설정된 현재 옵션 플래그로 확장
- $$ : 현재 쉘의 프로세스 ID
- $! : 가장 최근에 백그라운드로 실행된 프로세스의 ID를 가지고 있음
- $0 :쉘 또는 쉘 스크립트의 이름을 가지고 있음
- $_ : 아규먼트 목록을 사용해 실행된 쉘스크립트의 절대 경로를 가지고 있음
5. 본 쉘
- 본 쉘 shbang 라인 : 쉘 스크립트의 첫 라인에 #!/bin/sh를 입력해서 커널에게 이 파일은 본 쉘 스크립트라고 인지해야 함
- 주석은 #을 사용
- 와일드 카드 : ``,?,[] 는 파일명 확장을 위해 사용되고, <,>,2>,>>,| 문자들은 표준 IO를 위해 사용된다. 문자들이 인터프리터에 의해 해석되지 않도록 하기 위해선 인용부호(', '')로 감싸주면 됨
- read : 사용자의 입력을 읽고 read 명령의 오른쪽에 적는 변수에 사용자 입력값을 할당
- read word echo "입력한 단어는: $word"
- 조건문
- if~then 문장을 사용하며 if문의 끝에는 반드시 fi를 적어 if문이 끝났음을 표시
- case문
- case "$color" in blue) echo $color is blue ;; green) echo $color is green ;; red|orange) echo $color is red or orange ;; *) echo "Not a color" # default esac
- 루프문 : while, until, for 3가지 종류가 존재
- while : 뒤에 오는 명령이나 표현식이 treu면 계속해서 do와 done 사이 문장 실행
- until : while와 비슷하지만 until 뒤에 오는 명령이 false가 될 때까지 do와 done 사이 문장 실행. 거의 사용하지 않음
- for : 단어목록을 통해서 반복, for 다음으로 변수 이름이 오고 in 다음 단어 목록이 온다. 그리고 do와 done 키워드 사이의 문장을 수행
- 파일 테스팅 : test은 상태 표현식을 판단하기 위해 사용
- 파일, dir, plain 텍스트, 읽을 수 있는 파일 등의 속성을 테스트하기 위해 옵션을 가지고 있음
- d : 디렉터리인지 테스트
- f : 파일인지 테스트
- r : 현재 사용자가 읽을 수 있는지 테스트
- s : 파일 크기가 0보다 큰지 테스트
- w : 현재 사용자가 파일에 쓰기 가능한지 테스트
- x : 현재 사용자가 파일을 실행할 수 있는지 테스트
- 함수
- #!/bin/sh lister(){ echo "현재 디렉터리는 'pwd'입니다" echo "현재 디렉터리 파일은 아래와 같습니다" ls } lister
5.1 배쉬 쉘 문법과 구조
- 대부분의 리눅스에서 기본 쉘로 bash(Bourne Again SHell) 쉘을 사용하고 있음
- 로그인 과정
- init 프로세스 생성
- getty 프로세스 생성
- 로그인 프롬포트를 보여줌
- /bin/login 프로그램이 실행되고 로그인 아이디를 입력하면 로그인 패스워드 입력을 기다림
- 입력받은 패스워드가 정확하면 환경 설정이 초기화되고 로그인 쉘을 시작
- /etc/profile 시스템 파일을 찾아 명령 라인에서 실행
- 유저의 홈디렉터리에 있는 유저의 초기 파일인 .bash_profile 파일 실행, .bashrc 라는 환경 파일을 실행
- 달러($) 기호를 모니터에 보여주며 유저의 명령을 기다림
5.2 배시 쉘 옵션 설정을 위한 set, shopt 명령
- set 명령어는 특수한 빌트인 내장 옵션들을 켜고, 끄는 역할을 함
- set -o : 쉘의 설정값 출력
- set -o option : 옵션을 사용, set +o option : 옵션을 사용하지 않음
- set -[a-z] : 옵션을 사용하는 단축형
- set +[a-z] : 옵션을 사용하지 않는 단축형
- shopt 명령은 배시 쉘에서 사용되는 set 명령으로 새로운 버전의 쉘 옵션 내장명령어. p 옵션을 사용해 모든 옵션을 출력해볼 수 있으며, u 옵션을 사용해 옵션 셜정을 off할 수 있고, s 옵션을 사용해 on할 수 있음
5.3 배열
- 배시 쉘은 1차원 배열 생성을 지원. 배열은 하나의 변수 이름에 숫자 목록, 이름 목록, 파일 목록 등의 단어 목록 집합을 할당할 수 있음. 빌트인 함수 declear -로 x[0] 형태로 생성
- 배열의 요소를 가져올 때에는 ${배열명[index]} 형식을 사용하며 ar 옵션을 사용하면 읽기전용 배열이 생성
- 배열 요소의 개수를 파악할 경우엔 ${#names[*]}을 사용
- 배열의 인덱스를 사용해 특정 인덱스에만 값을 넣을 수 있음
5.4 함수
- 쉘의 컨텍스트 안에 명령들의 그룹 이름을 사용한다(자식 프로세스가 생성되지 않음)
- 함수가 한번 정의되면 쉘 메모리에 적재되기 때문에 함수가 호출될 때 디스크로부터 읽어들일 필요가 없음/ 함수는 스크립트의 모듈을 향상시키기 위해 사용
- 실행될 때 프롬프트에서 정의될 수 있지만 대부분 유저의 초기화 파일(.bash_profile)에 정의 그리고 함수는 호출되기 이전에 반드시 정의되야 함
- 함수 정의
- 본 쉘 방식 : 함수명을 적고 빈 괄호를 적은 다음 함수 정의
- function 키워드를 사용. 컬리 브레이스({) 앞뒤에는 반드시 공백이 있어야 함
- 정의 부분은 세미콜론(;)으로 분리된 명령어들로 구성되며, 마지막 명령어는 세미 콜론(;)으로 끝나야 함
- declare -F 명령을 실행하면 정의되어 있는 함수명을 출력할 수 있으며, unset -f 함수명을 사용해 현재 쉘에서 정의한 함수를 제거할 수 있다
6. exec 명령
- 새로운 프로세스를 시작하지 않고 현재 프로그램을 대신하여 사용 가능 표준 출력 또는 표준 입력은 서브쉘을 생성하지 않고 exec 명령으로 변경 가능 만약 파일이 exec 명령으로 오픈되면 파일의 끝까지 한 라인씩 읽게 됨
7. 파이프
- 파이프 심볼(|)의 왼쪽 명령의 결과를 가져와서 오른쪽 명령의 입력으로 사용하도록 함
- who | wc -l
- 파이프는 3단계의 처리를 수행
- who 명령의 결과값이 커널 버퍼로 보내지고, wc -l 명령은 버퍼로부터 데이터를 읽은 다음, 결과를 모니터 스크린으로 보냄
728x90
'IT_Engineer > DevOps_Unix & Linux (Bash)' 카테고리의 다른 글
[Linux] 정규 표현식 (0) | 2020.12.07 |
---|---|
[OS] CentOS 7 부팅 USB 만들기 (1) | 2020.12.02 |
[Linux] 리눅스의 부팅 과정과 로그인 쉘 #1 (0) | 2020.11.19 |
[Linux] 쉘과 명령어 기초 #4 (0) | 2020.11.18 |
[Linux] 쉘과 명령어 기초 #3 (0) | 2020.11.17 |