반응형
[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
리눅스 쉘 스크립트 기초 - 변수 선언, 변수 호출 정리 및 요약
변수 선언의 규칙을 준수하고 주의사항을 지키며 변수를 선언하고
치환하는 작업을 몇 번 반복하여 숙지할 정도로 어렵지 않은 편이기 때문에
입문자 및 초급자분들은 쉽게 배우실거라 생각합니다.
잘못된 정보나 질문이 있으신 분들은 댓글을 남겨주시면 성실하게 답변드리겠습니다.
감사합니다.
반응형
그리드형
'IT > 리눅스 쉘 스크립트' 카테고리의 다른 글
[shell script] 쉘 스크립트 기초 #6 - 반복문 for문 개념 및 사용법 (0) | 2022.05.10 |
---|---|
[shell script] 쉘 스크립트 기초 #5 - 조건문 if문 옵션 사용법 및 총정리 (0) | 2022.04.27 |
[shell script] 쉘 스크립트 기초 #4 - 조건문 if문 개념 규칙 및 문법 (0) | 2022.04.26 |
[shell script] 쉘 스크립트 기초#3, 기초 예제 - 변수 사용 예제 (1) | 2022.04.18 |
[shell script #1] 리눅스 쉘 스크립트 실행 sh 파일 만들기 (0) | 2022.04.07 |
댓글