출처 : https://www.youtube.com/watch?v=luGBPz3ibik&list=PLVsNizTWUw7FqN2gq79Cb3R6qkS7mqOJk&index=45
이번 장에서는 리눅스의 셸을 잘 활용하는 데 필요한 셸 스크립트 프로그래밍에 관해 학습한다.
리눅스의 셸은 명령과 프로그램을 실행할 때 사용하는 인터페이스이다. Windows의 명령 프롬프트와 비슷해 보이지만, 셸은 더 강력한 프로그래밍 기능이 있다.
셸의 기본
셸은 사용자가 입력한 명령을 해석해 커널에 전달하거나 커널의 처리 결과를 사용자에게 전달하는 역할을 한다. 텍스트 모드나 터미널처럼 명령을 입력하는 환경이 셸이다.
Rocky Linux의 bash
- Rocky Linux에서 기본적으로 제공하는 셸은 bash(Bourne Again SHell) 셸이다.
- bash 셸의 특징
- Alias 기능 (명령어 단축 기능)
- History 기능 (위/아래 화살표로 이전에 입력했던 명령어 불러오기)
- 연산 기능
- Job Control 기능
- 자동 이름 완성 기능 (Tab 키)
- 프롬프트 제어 기능
- 명령 편집 기능
- 셸의 명령문 처리 방법
- (프롬프트) 명령어 [옵션...][인자...]
- ex) # ls -l, rm -rf /mydir, find . / -name "*.conf"
환경 변수
- "echo $환경변수이름" 으로 확인 가능
- "export 환경변수=값" 으로 환경 변수의 값을 변경
- 주요 환경변수
셸 스크립트 프로그래밍 실습
- 리눅스의 셸 스크립트 문법은 C 언어와 유사하게 프로그래밍이 가능하다.
- 변수, 반복문, 제어문 등의 사용이 가능하다.
- 별도로 컴파일하지 않고 텍스트 파일 형태로 바로 실행이 가능하다.
- nano, vi, gedit 에디터로 작성 가능하다.
- 리눅스의 많은 부분이 셸 스크립트로 작성되어있기 때문에, 셸 프로그래밍을 공부하면 좋다.
셸 스크립트 작성과 실행
- nano나 gedit으로 작성
- 셸 스크립트 파일의 확장명은 되도록 *.sh로 해주는 것이 좋다. 그러면 파일 이름만으로 이 파일이 셸 스크립트 파일이라는 것을 알 수 있다.
- 셸 스크립트 파일을 /usr/local/bin/ 디렉토리에 복사하고, 속성을 755로 변경해주면 모든 사용자가 스크립트를 사용할 수 있다.
- 이 작업은 보안상 root만 수행한다.
실행 방법
- sh <스크립트 파일>로 실행
- "chmod + x <스크립트 파일>" 명령으로 실행 가능 속성으로 변경한 후, "./<스크립트파일>" 명령으로 실행
실습
server 가상 머신을 설정 완료 상태로 초기화하고 root 사용자로 접속한다.
터미널에 gedit name.sh 명령을 입력해 새로운 파일을 gedit 에디터로 실행한다.
간단한 셸 스크립트를 작성한다.
#!/bin/sh -> 특별한 형태의 주석(#!)으로 bash를 사용하겠다는 의미이다.
첫 행에 꼭 써줘야 한다.
echo "사용자 이름: " $USER -> echo는 print와 동일하다.
"사용자 이름: "이 출력되고, 그 다음 $USER라는 환경변수의 내용이 출력된다.
echo "홈 디렉토리: " $HOME
exit 0 -> 종료 코드를 반환해준다.
다른 스크립트에서 이 스크립트를 호출한 후 제대로 실행되었는지 확인하려면
적절한 종료 코드를 반환하는 것이 중요하다.
sh name.sh 명령을 입력하면 위 그림과 같이 사용자 이름과 홈 디렉토리가 출력된다.
혹은 파일 자체를 실행 파일 속성으로 바꿔도 된다. chmod 명령을 입력해 모든 사용자에게 실행 권한을 부여하면 된다.
chmod +x name.sh
./name.sh 를 입력하면 실행이 된다.
변수
변수는 필요한 값을 계속 변경해 저장할 때 사용한다. 셸 스크립트의 구조는 변경할 필요가 없는데 설정해야 하는 값이 상황에 따라 다르다면, 변수에 필요한 값을 계속 바꾸는 방법으로 프로그래밍해 다양한 상황에 대처할 수 있다.
변수의 기본
- 변수를 사용하기 전에 미리 선언하지 않으며, 변수에 처음 값이 할당되면서 자동으로 변수가 생성된다.
- 모든 변수는 문자열(String)으로 취급한다. 즉, 숫자를 넣어도 문자로 취급한다.
- 변수 이름은 대소문자를 구분한다.
- 변수를 대입할 때 "=" 좌우에는 공백이 없어야 한다.
'Study > 이것이 리눅스다 with Rocky Linux 9' 카테고리의 다른 글
8장. 원격지 시스템 관리 (2) - OpenSSH 서버 (0) | 2023.12.30 |
---|---|
8장. 원격지 시스템 관리 (1) - 텔넷 서버(Telnet Server) (0) | 2023.12.30 |
6장. 디스크 관리와 사용자별 공간 할당 (11) - 사용자별 공간 할당 (쿼터) (0) | 2023.12.28 |
6장. 디스크 관리와 사용자별 공간 할당 (10) - RAID에 리눅스 설치 (0) | 2023.12.28 |
6장. 디스크 관리와 사용자별 공간 할당 (9) - LVM(Logical Volume Manage) (0) | 2023.12.27 |