이번 포스팅에서는 리눅스의 셸 스크립트(쉘 스크립트, Shell Script) 프로그래밍에 대해 다뤄보겠습니다.
[ 리눅스에서 셸 스크립트 프로그래밍이 필요한 이유 ]
리눅스에서 코딩이 필요한 대표적인 이유는 시간 절약과 편의성 때문입니다.
리눅스에서 셸 스크립트를 잘 사용한다면 명령어만으로 운용하는 것보다 훨씬 편하고 시간도 절약할 수 있기에
알아두면 좋습니다.
[ Bash Shell의 특징 ]
- Alias (명령어 단축키)
- History
- 자동 완성 기능
- 프롬프트 제어 기능
- 명령어 편집 기능
[ 셸 스크립트의 특징 ]
1. C언어와 유사하게 프로그래밍이 가능 (리눅스는 C로 만들어짐)
2. 변수, 반복문, 제어문 등의 사용이 가능
3. 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행 가능.
4. vi 편집기나 gedit으로 만들어서 실행해도 실행 가능.
5. 리눅스의 많은 부분이 셸 스크립트로 작성되어 있음.
[ 변수의 기본 ]
1. 변수의 형식 : A=“내용”
( 위에서 사용한 [ = ] 는 같다의 의미가 아닌, 대입의 의미입니다. 우측의 내용을 좌측의 변수에 대입합니다. 이를 대입
연산자라고 합니다. 같다는 의미의 연산자는 [ == ]로 사용합니다. )
2. 모든 변수는 ‘문자열(string)’로 취급합니다.
3. 변수 이름은 대소문자를 구분합니다.
4. 변수를 대입할 때 ‘=’ 대입 연산자의 좌우에는 공백이 존재해서는 안됩니다.
ex) 이름=“홍길동” (O) / 이름 = “홍길동” (X)
아래 예시처럼 대입 연산자의 좌우에 공백이 존재하면 오류가 생기는 것을 확인할 수 있습니다.
[root@localhost /]# testval = ksh bash: testval: 명령을 찾을 수 없습니다... [root@localhost /]# |
[root@localhost /]# testval=ksh [root@localhost /]# echo $testval ksh [root@localhost /]# |
만약 띄어쓰기가 필요한 경우에는 아래 예시처럼 큰따옴표 ( " " )로 문자열을 묶어줘야 합니다.
[root@localhost /]# testval="hi everyone" [root@localhost /]# echo $testval hi everyone |
모든 변수는 '문자열(string)'로 취급합니다.
[root@localhost /]# testval=5+5 [root@localhost /]# echo $testval 5+5 |
위 예시에서 사용했던 echo 명령어로 환경 변수를 출력할 수 있습니다.
환경 변수를 출력하려면 앞에 '$'를 붙여야 합니다.
(ex. echo $LANG)
[ 환경 변수 ]
1. HOME : 현재 사용자의 홈 디렉터리
2. PATH : 실행 파일을 찾는 디렉터리 경로
3. USER : 현재 사용자의 이름
4. BASH : bash 쉘의 경로
5. LANG : 기본 지원되는 언어
아래 예시의 UTF-8은 한글 유니코드입니다. 1 글자당 2byte 또는 3byte를 할당합니다.
[root@localhost /]# echo $LANG ko_KR.UTF-8 |
vi 편집기로 셸 스크립트 파일을 생성해보겠습니다.
[root@localhost test]# vi name.sh |
name.sh 파일 안의 내용은 아래와 같습니다. ( :set nu로 행 번호를 보이게 설정해두었습니다. )
쉘 스크립트 파일은 #! /bin/sh로 시작합니다.
"이 부분부터 쉘 스크립트로 작성되었습니다"를 알려주는 것입니다.
[ .sh란? ]
리눅스에서는 확장자의 개념이 없습니다. 하지만 스크립트 파일은 대부분 .sh로 작성됩니다.
.sh는 스크립트 파일임을 알려주는 약속 같은 것이라고 생각하면 됩니다.
[ 셸스크립트 실행 방법 ]
1. sh 명령어로 실행 : sh [스크립트 파일] ==> 간접 실행
2. ./[스크립트 파일] ==> 직접 실행 : x 권한 필요
아까 생성했던 name.sh를 실행해보겠습니다.
[root@localhost test]# sh name.sh 사용자 이름 : root 홈 디렉터리 : /root [root@localhost test]# ./name.sh -bash: ./name.sh: 허가 거부 [root@localhost test]# |
1번의 방법인 sh 명령어로 실행했을 때 잘 나오는 것을 확인할 수 있습니다.
하지만, 2번의 방법으로 실행했을 때 허가 거부가 나옵니다.
이유는 x권한(실행 권한)이 없기 때문입니다. 2번의 방법은 "직접 실행"이기 때문에 UID에 x권한이 꼭 필요합니다.
[root@localhost test]# ll | grep name.sh -rw-r--r-- 1 root root 84 3월 28 01:10 name.sh [root@localhost test]# |
아래 예시처럼 chmod 명령어로 name.sh의 UID권한에 실행 권한을 추가 후 ./name.sh로 쉘 스크립트를 실행해보면 실행이 잘 되는 것을 확인할 수 있습니다.
[root@localhost test]# chmod 744 name.sh [root@localhost test]# ll | grep name.sh -rwxr--r-- 1 root root 84 3월 28 01:10 name.sh [root@localhost test]# [root@localhost test]# ./name.sh 사용자 이름 : root 홈 디렉터리 : /root [root@localhost test]# |
[ 숫자 계산_expr ]
위에서 말했듯이 모든 변수를 "문자열(String)"로 취급합니다.
숫자로 인식하게 하려면 expr이라는 키워드가 필요합니다.
- expr 키워드를 사용할 경우 수식과 함께 역따옴표 ( ` )로 묶어줘야 합니다.
- * 와 () 는 특수기호로 인식되므로 연산자로 인식하기 위해서는 \를 앞에 붙여야 합니다.
- 연산에 들어간 모든 변수, 숫자, 기호 사이에는 공백이 있어야 합니다. (역 따옴표 사이)
numcalc.sh라는 셸 스크립트 파일을 만들어보겠습니다.
[root@localhost test]# vi numcalc.sh |
numcalc.sh 파일의 내용은 아래와 같이 구성했습니다.
실행 결과는 아래와 같습니다.
[root@localhost test]# sh numcalc.sh 10+20 30 |
2번 행에서 num1이라는 변수에 10을 대입
3번 행에서 num2라는 변수에 20을 대입
4번 행에서 num3이라는 변수에 num1의 값과 num2의 값을 더함.
여기서 4번 행은 expr키워드와 역따옴표 ( ` )가 없기 때문에 문자열로 취급을 합니다. 따라서 연산자인 +의 양 옆에는 공백이 있으면 안 됩니다. 결국 10+20을 계산하지 않고 문자열로 취급하여 5번 행에서 출력합니다.
7번 행에서는 num4라는 변수에 num1과 num2의 값을 수식으로 계산하여 대입했습니다.
4번 행과 다르게 7번 행에서는 역따옴표 ( ` )를 사용하여 expr 키워드를 같이 묶었기 때문에 연산자인 +의 양 옆에는 공백이 있어야 합니다.
'[Linux] 리눅스(CentOS7)' 카테고리의 다른 글
[Linux] 리눅스 패키지 관리 시스템 (0) | 2022.04.11 |
---|---|
[Linux] 리눅스 셸 스크립트 프로그래밍_2 (0) | 2022.04.10 |
[Linux] VirtualBox에 리눅스 CentOS7 설치하기_4 (0) | 2022.03.25 |
[Linux] VirtualBox에 리눅스 CentOS7 설치하기_3 (0) | 2022.03.24 |
[Linux] VirtualBox에 리눅스 CentOS7 설치하기_2 (0) | 2022.03.23 |