본문 바로가기
IT/리눅스 쉘 스크립트

[shell script] 쉘 스크립트 기초 #2, 기초 문법 - 변수 선언, 변수 호출

by 꾸꾸웍스 2022. 4. 9.
반응형

[shell script] 쉘 스크립트 기초 문법 - 변수 선언, 변수 호출


 


※ 목차

1. 쉘 스크립트에서 변수(Variable) 란???
2. 쉘 스크립트 변수 기초 문법 및 주의사항

3. 변수 할당 - 숫자
4. 변수 할당 - 문자
5. 변수 할당 - 명령어
6. 변수 치환

 


 

1. 쉘 스크립트에서 변수(Variable) 란???
  • 정해 지지 않은 값을 저장하는 공간으로 지정한 영역 안에서 한번 사용되는 것이 아니라 프로그램이 실행되는 동안 계속해서 사용될 수 있습니다. 
  • 사용자가 입력한 변수의 데이터 값(변수 선언)은 컴퓨터의 저장장소(메모리)로 이동되어 저장되고 이 데이터를 연산하여 사용자가 호출(변수 호출)하여 저장장소에 있던 데이터들이 출력되는 것을 의미합니다.
  • 선언하는 방법은 여러 가지이며 어떤 것을 변수에 할당하느냐에 따라 데이터의 크기는 달라질 수 있습니다.
  • 변수 할당은 정해 지지 않은 값을 데이터 저장소에 담는 것을 의미합니다.
  • 변수 치환은 저장소에 담겨있는 변수를 불러 출력하는 것을 의미합니다.

 

2. 쉘 스크립트 변수 기초 문법 및 주의사항
  • 변수 할당 시 다른 컴퓨터 언어와 마찬가지로 '=' 기호를 이용해 변수를 선언을 합니다.
  • '=' 기호를 사용할 때 주의할 점은 앞뒤로 공백이 없어야 됩니다. (공백 생성 시 실행 단계에서 오류 발생)
변수이름=[내용]

### file.sh라는 쉘 스크립트 파일 생성
[ server 2022-04-06 15:30:37 ] ~/testdir
user@server # ll
total 0
-rwxr-xr-x 1 user user 0 Apr  6 15:29 file.sh

### vim 편집기로 A,B,C에 각 1이라는 변수를 생성(각 변수마다 띄어쓰기 다르게 함)
[ server 2022-04-06 15:30:37 ] ~/testdir
user@server # vim file.sh

### 스크립트를 실행 후 변수 선언 시 띄어쓰기를 한 경우 오류가 출력되는 것을 확인
[ server 2022-04-06 15:32:35 ] ~/testdir
user@server # ./file.sh
./file.sh: line 2: B: command not found
./file.sh: line 3: 3: command not found

### 앞뒤로 공백이 없는 A라는 변수 만 오류가 생기지 않음
[ server 2022-04-06 15:32:36 ] ~/testdir
user@server # cat -n file.sh
     1  A=1
     2  B =2
     3  B= 3

 

  • 변수를 선언할 시 변수 이름은 대문자로 통일을 하는 것이 좋습니다.
쉘 스크립트 내용이 간단하고 본인이 사용한다고 가정하면 큰 문제는 발생하지 않지만
스크립트 내용이 복잡하고 내용의 라인의 수가 길어지고
본인 또는 여러 사용자가 사용한다면 쉘에서는 대문자와 소문자를 구별하여
다른 문자로 인식하기 때문에 변수의 이름을 착각하여 호출 및 치환할 시 오류가 생깁니다.

따라서 변수 이름은 대문자로 통일해야 코드의 오류를 피할 수 있습니다. 
### 변수 선언을 숫자로 할당

### 올바른 예
TODAY=1111

### 잘못된 예(대문자와 소문자를 섞는다)
Today=1111
toDay=1111

 

  • 쉘 스크립트를 작성할 때 변수들의 위치는 최상단에 위치하는 것이 좋습니다.
    • 예를 들어 스크립트 내용이 100줄이라고 가정하면 변수들의 적절한 라인 위치는 초반인 1줄~20줄.
쉘 스크립트 작성할 때 라인 수가 20~30 내에 작성이 되면 변수의 위치를 파악할 수 있지만
작성할 내용에 따라 100줄이 넘어갈 상황도 있습니다. 이때 중간중간에 변수를 넣어 버리면
쉘 스크립트를 수정할 때 일일이 위치를 찾는 것이 번거롭기 때문에 다른 사용자의 가독성과
쉘 스크립트 수정을 위해 변수의 위치는 되도록 상단에 위치하는 게 좋습니다.

 

  • 쉘 스크립트를 작성할 때 같은 내용 및 비슷한 내용의 변수를 여러 번 선언하지 않습니다.
    • 변수를 선언한다는 것을 사용자가 입력한 값의 데이터를 데이터 저장소(메모리)에 적재시키는 것이라서 비슷하고 많은 내용을 여러 번 변수로 지정하면 많은 메모리 부분을 차지하고 많은 연산을 일으킬 수 있습니다.
    • 따라서 LOW DATA를 변수로 선언하고 최초로 선언한 변수를 이용하는 것이 좋습니다.
### 숫자 01 02 03을 출력하고 숫자 07 08 09를 출력하는 프로그램

[ server 2022-04-06 16:33:38 ] ~/testdir
user@server # cat -n file.sh
 	1
 	2 echo "========correct example"
 	3 NUMBER=`seq -w 01 10` 
 	4 echo "$NUMBER" | grep -v -e 04 -e 05 -e 06 -e 10
 	5
 	6 echo "========wrong example"
 	7 NUMBER=`seq -w 01 03`
 	8 echo "$NUMBER"
 	9 NUMBER=`seq -w 07 09`
	10 echo "$NUMBER"

[ server 2022-04-06 16:33:50 ] ~/testdir
user@server # ./file.sh
========correct example
01
02
03
07
08
09
========wrong example
01
02
03
07
08
09
3~4번 줄과 7~10번 줄의 쉘 스크립트 결과는 동일합니다.
2개의 차이점은 변수의 개수입니다.
3~4번 줄은 01번부터 10번 까지를 담은 변수를 이용해 치환을 하고
7~10번 줄은 01번부터 03번까지의 변수와 07번부터 09번까지의 변수 총 2개를 사용하였습니다.

이와 같이 비슷한 데이터의 변수는
되도록 Low 데이터로 선언하여 치환하는
습관을 들이는 것을 추천드립니다.

 


3. 변수 할당 - 숫자
  • 숫자로 변수를 할당할 시 '변수이름=숫자'를 사용합니다.
  • 숫자는 한자리와 여러 자리를 변수로 사용할 수 있습니다.
  • 숫자로 띄어쓰기를 하면 구문 오류가 발생하여 작은따옴표(') 또는 큰따옴표(")를 사용합니다.
    • 이때 작은따옴표나 큰따옴표를 사용하면 숫자가 아닌 텍스트(문자)로 인식하게 됩니다.
[ server 2022-04-06 17:10:06 ] ~/testdir
user@server # cat -n file.sh
     1  A=1
     2  B=0123456789
     3  C='0 1 2 3 4'
     4  D="0 1 2 3 4"
     5  E=0.11457
     6
     7  echo "$A"
     8  echo "$B"
     9  echo "$C"
    10  echo "$D"
    11  echo "$E"

[ server 2022-04-06 17:10:09 ] ~/testdir
user@server # ./file.sh
1
0123456789
0 1 2 3 4
0 1 2 3 4
0.11457

 


 

4. 변수 할당 - 문자
  • 문자(텍스트)로 변수를 선언할 시 되도록 큰따옴표(")를 사용합니다.
  • 특수문자도 마찬가지로 큰따옴표(")를 사용합니다.
[ server 2022-04-06 17:19:35 ] ~/testdir
user@server # cat -n file.sh
     1  A=A
     2  B=ABCDEF
     3  C='a b c d e'
     4  D="a b c d e"
     5  E="A/B/C/D"
     6
     7  echo "$A"
     8  echo "$B"
     9  echo "$C"
    10  echo "$D"
    11  echo "$E"

[ server 2022-04-06 17:19:37 ] ~/testdir
user@server # ./file.sh
A
ABCDEF
a b c d e
a b c d e
A/B/C/D

 


5. 변수 할당 - 명령어
  • 명령어로 실행하여 나온 출력 값을 변수에 할당할 수 있습니다.
  • 변수로 선언할 명령어를 역따옴표(`)(백틱(backticks))로 묶어서 사용할 수 있습니다.
  • 변수 할당에 숫자와 문자도 많이 사용되지만 명령어 치환은 쉘 스크립트의 핵심이기 때문에 선언할 시 구분 기호를 주의해야 됩니다.
[ server 2022-04-06 17:29:07 ] ~/testdir
user@server # cat -n file.sh
     1  A=`ls -l`
     2
     3  echo "$A"

### A의 변수에 ls -l 이라는 명령어의 결과 값을 담고 echo 명령어로 A 변수를 호출하여 출력
[ server 2022-04-06 17:29:08 ] ~/testdir
user@server # ./file.sh
total 4
-rwxr-xr-x 1 user user 21 Apr  6 17:29 file.sh

 


 

6. 변수 치환
  • 변수 선언은 데이터를 데이터 저장장치에 담은 역할을 한 것이면 데이터 저장장치에 담긴 데이터를 사용해야 하는 것이 치환입니다.
  • 치환은 키보드의 shift+4의 '$'기호를 변수 이름 앞에 사용하며 '${변수 이름}'을 사용할 수 있고 줄여서 '$변수이름' 을 사용 할 수 있습니다.
  • 큰 따옴표(")로 묶으면 치환이 일어나지만 작은 따옴표(')를 묶으면 변수 이름이 문자 그대로 해석됩니다.
  • 변수를 할당하지 않고 치환하게 되면 0이 아닌 'null' 값을 나타 냅니다.
[ server 2022-04-06 17:42:35 ] ~/testdir
user@server # cat -n file.sh
     1  A="This is apple"
     2
     3  echo $A
     4  echo '$A'
     5  echo "$A"
     6
     7  echo "$B"

[ server 2022-04-06 17:42:38 ] ~/testdir
user@server # ./file.sh
This is apple
$A
This is apple

  • 치환 시 큰 따옴표의 차이점
    • 큰 따옴표를 하지 않고 치환하여 출력하면 구분 없이 한 줄에 출력됩니다.
    • 큰 따옴표를 하고 치환하여 출력하면 치환이 일어나 여러 줄에 출력됩니다.
[ server 2022-04-06 17:45:23 ] ~/testdir
user@server # cat -n file.sh
     1  A=`ls /var | head -10`
     2
     3  echo $A
     4	echo "--------"
     5  echo "$A"

[ server 2022-04-06 17:45:25 ] ~/testdir
user@server # ./file.sh
adm cache crash db empty games gopher kerberos lib local
--------
adm
cache
crash
db
empty
games
gopher
kerberos
lib
local

 


 

리눅스 쉘 스크립트 기초 - 변수 선언, 변수 호출 정리 및 요약

변수 선언의 규칙을 준수하고 주의사항을 지키며 변수를 선언하고

치환하는 작업을 몇 번 반복하여 숙지할 정도로 어렵지 않은 편이기 때문에
입문자 및 초급자분들은 쉽게 배우실거라 생각합니다.
잘못된 정보나 질문이 있으신 분들은 댓글을 남겨주시면 성실하게 답변드리겠습니다.

감사합니다.

 

반응형
그리드형

댓글