리눅스

쉘 프로그래밍 [변수]

작성자
heukchoo
작성일
2021-01-17 23:53
조회
304
프로그래밍을 하려면 맨 처음 알아야 할것이 변수 사용법이다.

변수는 이름 그대로 변하는 수이며, 값을 담는 상자라 생각하면 편하다.

C언어의 경우 정수, 실수, 문자, 문자열 등의 각 타입을 구분하여 변수를 지정하지만 쉘에서는 타입의 구분없이 지정할 수 있어 편하다.

변수의 지정 방법은 다음과 같다.

(val 앞의 $는 프롬프트이다.)
$val=값

var는 변수명이다. 변수명은 한글을 제외하고 영문자, 숫자, 기호 등으로 아무렇게 지으면된다.

다만 지정할 수 없는 명명 규칙이 있는데 굳이 외울 필요는 없다.
억지로 이상하게 명명하지 않는한 문제 생기지 않는다.

지정된 변수의 값을 출력하는 것은 다음과 같다.
$var=heuk

$echo $var
heuk

$echo ${var}choo
heukchoo

echo는 콘솔에 문자를 출력하는 명령이다.

변수명 앞에 달러($)를 붙이면 변수명을 사용할 수 있다.

변수명을 중괄호로 묶어서 사용할 수도 있다.
중괄호는 위 예시와 같이 변수명을 다른 문자와 구분할때 사용한다.
만일 중괄호를 사용하지 않으면 컴퓨터는 varchoo를 변수명으로 인식한다.

변수 값을 다음과 같이 제어할 수도 있다.
(#은 주석이다.)
#변수지정
$var=oobcoodfoo

#변수값의 문자수 출력
$echo ${#var}
10

#변수값의 3번째 문자부터 출력(0번째부터 카운트)
$echo ${var:3}
coodfoo

#변수값의 3번째부터 4개의 문자 출력
$echo ${var:3:4}
cood

#변수값의 첫번째 oo문자를 xx로 치환
$echo ${var/oo/xx}
xxbcoodfoo

#변수값의 모든 oo문자를 xx로 치환
$echo ${var//oo/xx}
xxbcxxdfxx

#변수값의 시작 문자가 oo이면 xx로 치환
$echo ${var/#oo/xx}
xxbcoodfoo

#변수값의 종료 문자가 oo이면 xx로 치환
$echo ${var/%oo/xx}
oobcoodfxx

더 많은 방법이 있지만 이정도면 충분할 것이다.

다음은 매개변수를 사용하는 방법이다.
매개변수는 스크립트 실행시 입력 받는 값을 저장한다.

#!/bin/bash는 bash 쉘로 작성된 스크립트임을 나타낸다.

스크립트

#!/bin/bash

echo “첫번째 두번째 매개변수: $1 $2”
echo $3
echo $#


$./스크립트파일.p aaa bbb ccc
첫번째 두번째 매개변수: aaa bbb
ccc
3

$1과 같이 달러와 숫자로 매개변수를 지정하여 사용할 수 있다.
샾(#)은 입력되는 값의 개수이다.

위와 같이 스크립트 실행시 값을 입력하면 매개변수에 순서대로 값이 저장된다.

다음은 변수가 얼마나 쓸모 있는지 보자.

스크립트

#!/bin/bash

echo “내용1” > 파일명.dat
echo “내용2” >> 파일명.dat
.
.


위 스크립트는 각 행의 출력결과를 파일명.dat 파일로 저장한다.

만일 스크립트 내의 '파일명.dat'을 다른 파일명으로 바꾸려고 한다면 일일히 파일명을 수정해야 할 것이다.
(수십개의 라인을 매번 수정한다 생각해보자 -_-;)

물론 텍스트 편집기의 일괄 바꾸기 기능을 쓸수도 있지만, 내용 중 파일명과 동일한 문자가 있는 경우 잘못 수정할 우려도 있다.

다음은 변수를 사용한 경우이다.

스크립트

#!/bin/bash

output=파일명.dat
echo “내용1” > $output
echo “내용2” >> $output
.
.


위 스크립트에서는 '파일명.dat'을 output 변수에 입력하고 각 행의 결과를 저장할 파일명을 output 변수로 대체 하였다.

실행하면 변수값으로 지정한 '파일명.dat' 파일에 각 행의 실행결과를 저장한다.
파일명을 수정할 때는 output 변수에 입력되는 파일명만 수정하면 된다.

다음은 명령어 실행 결과를 변수에 저장하는 방법이다.
$var1=`echo heuk`

$var2=$(echo choo)

$echo var1
heuk

$echo var2
choo

위와 같이 두 가지 방법이 있다.

var1의 그레이브(`)는 키보드의 물결 아래 문자이다.(작은 따옴표가 아님)

두 방법 모두 echo 명령어도 출력한 문자를 변수에 저장했다.

echo 외에도 다양한 명령어 실행 결과를 저장할 수 있어서 프로그래밍에 꽤 사용된다.

마지막으로 변수 사용 시 참고사항이다.

변수를 큰따옴표(" ")로 묶을 경우 컴퓨터는 변수를 인지한다.
작은따옴표(' ')로 묶을 경우 컴퓨터는 문자로 인지한다.

변수 사용 시 이를 주의해야 한다.

변수 사용은 프로그래밍의 시작이다.
전체 0