본문 바로가기
Programming/ETC

[Shell] 기본적인 쉘 스크립트 프로그래밍 정리 - 변수

by 코딩의성지 2020. 10. 19.

변수

 

변수의 기본내용

 

변수는 필요한 값을 저장하고 변경할 수 있는 공간이다. 쉘스크립트는 한번 짜두면 구조는 잘 변경되지 않지만 때에 따라서 설정해놓은 값을 변경해야하는 경우는 있다. 이때 이 변수에 저장해둔 값을 변경해준다.

 

쉘스크립트에서는 변수를 사용하기 전에 다른 언어들 처럼 따로 미리 선언해서 사용하지 않는다. 처음에 변수에 값이 할당될때 자동으로 변수가 생성되는 방식이다.

 

그리고 변수에 넣는 모든 값들은 문자열로 취급된다. 숫자를 넣어도 문자로 취급된다는 말이다

 

그리고 변수 명은 대소문자를 구분한다. 그리고 변수에 대입할 때 '='을 사용하는데 이때 양측에 공백이 없어야 한다.

 

그리고 문자열 사이에 공백을 넣어주려면 ""로 묶어줘야한다. 

그리고 + - * / %  등의 사칙연산을 변수에 대입하면 계산이 되는게 아니라 문자열로 그대로 저장이된다.

위에서 본것처럼 여러분이 예상하는 것처럼 $라는 문자가 변수를 출력하기 위해 사용하는 것인 것을 안다.

그렇다면 우리가 $가 들어간 문자를 출력하기 위해서는 ''(작은따움표) 로 묶어주거나 앞에 \ 를 붙여주면된다

그리고 변수는 ""(쌍따움표) 로 묶는건 영향이 없다.

 

또 값을 입력하는건 read 키워드를 쓴다. 

 

숫자 연산

 

처음에 제가 변수에 들어간 숫자 값들은 다 문자열로 인식된다고 말씀드렸었다. 그럼 쉘 프로그래밍에서 연산은 할 수 없는 걸까? 아니다. expr 키워드를 사용하면된다. 단 expr 키워드를 사용할때는 ` (역따옴표)로 묶어줘야한다. 그리고 또한 연산자와 숫자는 공백으로 띄워놔야한다!

또 수식에 괄호를 사용하기 위해서는 그앞에 \(역슬래쉬)를 붙여줘야한다. 그리고 *(곱셈) 역시 역슬러쉬를 붙여줘야한다.

 

파라미터 변수

 

파라미터 변수는  실행하는 명령의 부분 부분을 쪼개 그것을 하나하나 변수로 지정한다는 의미이다.

 

일단 쉘 파일을 하나 짜자

test.sh

 

그리고 내가

sh test.sh hi babo hello banker

이런 명령어를 날린다고 해보자.

 

그럼 아래처럼 파라미터 변수에 값이 저장된다.

명령어 test.sh hi babo hello banker
파라미터변수 $0 $1 $2 $3 $4

위의 파라미터변수의경우 10번째 부터는 {}로 감싸줘서 사용해줘야 한다.

(shift로 출력하는방법도 있긴하다...)

 

추가적으로 $* 과 $@ 로 전체 인자 값을 사용할 수 있으며, $#은 매개변수의 총 개수를 의미한다.

 

 

실행 결과를 보면 다음과 같다.

 

위 처럼 위치에 대한 파라미터도 사용할 수 있지만 특수한 매개 변수도 사용할 수 있다.

 

특수 파라미터 

변수 설명
$$ 현재 스크립트의 PID
$? 최근에 실행된 명령어,함수,스크립트 ㅈ자식의 종료 상태
$! 최근에 실행한 백그라운드(비동기)명령의 PID
$- 현재 옵션플래그
$_ 지난 명령의 마지막 인자로 설정된 특수 변수

 

매개 변수 확장


또한 사용하는 파라미터를 확장해서 사용할 수도 있다

아래 예를 표현하기 위한 변수는 다음과 같다.

string="abcdefghi"

 

# ${변수}

$변수와 동일, {} 사용해야만 동작하는 것들이 있어서 존재한다.

#!/bin/sh
string="abcdefghi"
echo ${string}
exit 0

결과

abcdefghi

 

# ${변수:-단어}

변수 미선언 혹은 NULL일때 기본값 으로 단어를 설정한다, 단 위치 매개 변수는 사용 불가하다

#!/bin/sh
# string="abcdefghi"
echo ${string:-hi} exit 0

결과

hi

 

# ${변수-단어}

변수 미선언 시에만  기본값 으로 단어를 설정한다, 단 위치 매개 변수는 사용 불가하다

#!/bin/sh 
# string="abcdefghi" 
echo ${string-hi} exit 0 

결과

hi

 

# ${변수:=단어}

변수 미선언 혹은 NULL일때 기본값을 지정한다, 위치 매개변수도 사용이 가능하다.

#!/bin/sh
echo ${string:=hello}
exit 0

결과

hello

 

# ${변수=단어}

변수 미선언 시에만 기본값을 지정한다, 위치 매개변수도 사용이 가능하다.

#!/bin/sh
echo ${string=hello}
exit 0 

결과

hello

 

# ${변수:?단어}

변수 미선언 혹은 NULL일때 단어 출력 후 스크립트를 종료함

#!/bin/sh
echo ${string:?hello}
exit 0 

결과

test.sh: 2: test.sh: string: hello

 

# ${변수?단어}

변수 미선언 시에만 단어 출력 후 스크립트를 종료함

#!/bin/sh
echo ${string?hello}
exit 0 

결과

test.sh: 2: test.sh: string: hello

 

# ${변수:+단어}

변수 선언 시에만 해당 단어로 바꿔서 출력

#!/bin/sh
string="hi"
echo ${string:+hello}
exit 0 

결과

hello

 

# ${변수+단어}

변수 선언 시 또는 NULL 일때 해당 단어로 바꿔서 출력

#!/bin/sh
string=
echo ${string+hello}
exit 0 

결과

hello

 

# ${#변수}

문자열 길이

#!/bin/sh
string="abcdefghi"
echo ${#string}
exit 0 

결과

10

 

# ${변수#단어}

변수 앞에서부터 짧게 일치한 단어 삭제함

#!/bin/sh
string="abcdefghiabc"
echo ${string#a*b}
exit 0

결과

cdefghiabc

 

# ${변수##단어}

변수 앞에서부터 길게 일치한 단어 삭제함

#!/bin/sh
string="abcdefghiabc"
echo ${string##a*b}
exit 0 

결과

c

 

# ${변수%단어}

변수 뒤에서부터 짧게 일치한 단어 삭제함

#!/bin/sh
string="abcdefghiabc"
echo ${string%b*c}
exit 0 

결과

abcdefghi

 

# ${변수%%단어}

변수 뒤에서부터 길게 일치한 단어 삭제함

#!/bin/sh
string="abcdefghiabc"
echo ${string%%b*c}
exit 0 

결과

a

 

 

자 오늘은 쉘프로그래밍 변수에 대해서 아주 간단하게 다루어 보았다 ~!! 그럼 다음에 또 작성하도록하겠다 ~~!!

 

반응형

댓글