Shell command

shell script 기본

longer 2023. 11. 4. 22:38

함수

스크립트를 재사용하기 위함으로 스크립트의 줄 수를 줄여 효율적인 스크립트를 만들수 있다.

 

#!/bin/bash
function print() {
        echo $1
}
print "I can speak Korean"

 

-> shell을 호출하면 print함수는 "I can speak Korean"을 인자값으로 변수로 입력받아 echo로 출력한다.

 

전역변수

전역변수는 스크립트 전체에서 변수에 저장한 값을 사용할 수 있는 변수를 의미한다.

#!/bin/bash

language="korean"

function print() {

        echo "I can preal $language"

}

print

print는 인자값이 없이 호출되고 print 함수 안에는 전역변수로 선언된 language 변수가 포함되어 echo로 출력된다.

 

지역변수

함수 내에서만 변수에 저장된 값이 유효한 변수로 

변수명 앞에 local 이라는 데이터 타입을 사용하여 지역변수라는 것을 선언한다. (local없는 경우 전역변수로 인식)

#!/bin/bash

language="Korean"

function learn() {
        local learn_lang="English"
        echo "I am learn $learn_lang"
}

function print() {
        echo "I can speak $1"
}

learn
print $language
print $learn_lang
실행결과 : 

I am learn English
I can speak Korean
I can speak

 

 

예약변수 및 환경변수

시스템을 위해 사전에 미리 시스템에서 사용하고 있는 변수들로 예약변수 또는 환경변수라고도 한다.

 




 
 

 

HOME : 사용자 홈디렉토리

PATH : 명령이나 셸 실행 시 실행 파일 디렉토리 경로

LANG : 기본으로 제공해주는 언어

PWD : 사용자의 현재 작업 중인 디렉토리

TERM : 로그인 터미널 타입

SHELL : BASH 실행 파일 경로

USER : 로그인한 사용자 이름

GROUP : 로그인한 사용자의 그룹 - 결과가 없는건 소속 그룹이 없음을 의미함

DISPLAY ; X디스플레이 이름

COLUMNS : 현재 터미널의 컬럼 수 

LINES : 현재 터미널의 라인 수

PS1 : 기본 프롬프트 변수 

PS2 : 보조 프롬프트 변수

PS3 : 셸 스크립트에서 select 사용 시 프롬프트 변수

PS4 : 셸 스크립트 디버깅 모드에서 프롬프트 변수

BASH :  BASH 실행 파일 경로

BASH_VERSION : 설치된 BASH 버전

HISTFILE : history 파일 경로

HISTFILEZIE : history 파일 크기

HISTZIE : history 저장 개수

HOSTNAME : 호스트 이름

HOSTTYPE : 시스템 하드웨어 종류

MACHTYPE : 머신종류 (HOSTTYPE보다 상세하게 나옴)

MAIL : 메일 보관 경로

LOGNAME : 로그인 사용자

SECONDS : 스크립트 또는 명령어가 실행된 시간의 초 단위

UID : 사용자 UID

OSTYPE : 운영체제 종류 

 

 

위치 매개변수

스크립트 수행 시 함께 넘어오는 파라미터를 의미

 

$0 : 실행된 스크립트 이름

$1 : $1 $2 $3...{$10} 파라미터 순서대로 번호가 부여되며, 10번째 부터는 "{}"로 감싸줘야함

$*  : 전체 인자값

$@ : 전체 인자값 ($*는 동일하지만 쌍따옴표로 변수를 감싸면 다른 결과가 나옴)

$# : 매개변수의 총 개

 

위치 매개 변수가 들어간 shell 호출
위치 매개 변수 shell 수행 결과

 

$*과 $@

$*과 $@를 for와 함께 사용할 때 큰 따옴표 " "를 앞뒤로 사용했을 경우와 그렇지 않을 경우의 차이점을 확실히 알 수 있다. 먼저 $*을 이용해 for를 사용하면 아래와 같이 큰따옴표 " "와 상관없이 스페이스를 기준으로 문자열을 파라미터로 인식한다.

shelltest.sh
실행결과
shelltest.sh
실행결과
shelltest.sh
실행결과

 

 
 

 

특수 매개변수

특수 매새변수는 현재 실행 중인 스크립트나 명령어의 프로세스 ID를 확인하거나 바로 앞에서 실행한 명령어나 함수 또는 스크립트 실행이 정상적으로 수행되었는지 여부를 확인할 수 있는 변수를 의미.

 

$$ : 현재 스크립트 또는 명령어의 IPD

$? : 최근에 실행된 명령어, 함수, 스크립트의 종료 상태

$! : 최근에 실행한 백그라운드(비동기) 명령어의 PID

$- : 현재 옵션 플래스

 

 

기본 변수 사용법

$변수 : 현재 문자열에서 해당 변수를 파라미터값으로 치환

${변수} : 위와 같지만 {}를 사용함으로써 뒤에오는 문자열과 구분 가능

 

예제 ) 

 

변수를 초기화(할당,치환)하기 위한 확장 변경자

 

확장자 설명
${변수-문자열} 변수가 설정되지 않은 경우 문자열로 변수를 치환
${변수:-문자열} 변수가 설정되지 않았거나 Null로 설정된 경우 문자열로 변수 치환

예제 ) 
${변수=문자열} 변수가 설정되지 않은 경우 문자열을 변수에 저장하고 변수치환
${변수:=문자열} 변수가 설정되지 않았거나 Null로 설정된 경우 문자열을 변수에 저장하고 변수 치환

예제)
${변수+문자열} 변수에 값이 설정되어있는 경우 다른 문자열로 변수 치환
${변수:+문자열}
변수에 값이 설정되고, Null이외의 값으로 설정된 경우 문자열로 변수 치환

예제1) 변수가 초기화되었을 경우


예제2) 변수가 선언되지 않았거나 NULL값일 경우

${변수?에러메세지} 변수가 설정된 경우 변수의 값을 사용하며, 설정되지 않은 경으 표준오류 출력으로 에러메세제를 출력
${변수:?에러메세지} 변수가 Null 이외의 값으로 설정된 경우 변수의 값을 사용하며, 변수가 설정되지 않았거나 Null인 경우 에러 메세지를 출력하고 셸을 종료
${변수:시작위치} 변수값이 문자열일 경우 시작위치부터 문자열 길이 끝까지 출력
${변수:시작위치: 길이} 변수값이 문자열일 경우 시작위치부터 길이까지 출력