* 환경 변수 확인 : printenv

- SHELL=/bin/bash : 현재 사용 중인 쉘
- HOSTNAME=KJRServer : 서버 이름
- USER=root / USERNAME=root : 로그인한 사용자
- HOME=/root : 루트 사용자의 홈 디렉터리
이렇게 확인된 값은 스크립트에서 echo를 통해 $USER, $HOME 같은 변수로 불러올 수 있다.
* 변수 확인 : echo

- echo $HOSTNAME → KJRServer
- echo $USER → root
환경 변수들이 잘 불러와지는 것을 확인
* 간단한 스크립트 작성 실습

work 디렉터리를 만들고 들어간 다음, name.sh 스크립트를 작성하였다.

- #!/bin/sh → 이 파일은 sh 쉘로 실행한다는 뜻
- $USER → 현재 로그인한 사용자 이름 (여기서는 root)
- $HOME → 홈 디렉터리 경로 (여기서는 /root)
- exit 0 → 정상 종료

- 처음엔 sh name.sh로 실행
- chmod 744 name.sh → 실행 권한 부여.
- ./name.sh로 직접 실행 가능.
처음에는 sh name.sh로 실행할 수 있지만, 실행 권한을 주면 ./name.sh로 직접 실행 가능하다.
* 사용자 입력받기

# 변수를 선언하고 입력받는 예제 var1.sh을 작성
#!/bin/sh
myvar="Hi Woo" # 변수 선언
echo $myvar # 변수 값 myvar 출력
echo "$myvar" # 변수 값 myvar 출력
echo '$myvar' # 작은따옴표는 문자열 그대로 $myvar 출력
echo \$myvar # 역슬래시는 $ 기호 자체 출력
echo 값 입력 :
read myvar # 사용자 입력을 변수에 저장
echo '$myvar' = $myvar # 사용자 입력 변수 출력됨
exit 0

- 큰따옴표("") : 변수 해석 O → 실제 값 출력
- 작은따옴표('') : 변수 해석 X → 그대로 출력
- 백슬래시() : 특수 문자 무력화 → $ 자체 출력
- read : 사용자 입력을 받아 변수에 저장
* 숫자 계산


연산을 하려면 expr 명령어를 사용해야 한다.
expr 명령어는 수식과 함께 역따옴표(`)를 사용해야 한다.
그리고 수식에 괄호를 사용하려면 그 앞에 꼭 역슬래시(\)를 붙여야 한다.
곱하기(*)도 앞에 역슬래시(\)를 붙여야 한다.
* 파라미터 변수


파라미터 변수는 $0, $1, $2 등의 형태를 갖는다.
이는 실행하는 명령의 부분 하나하나를 변수로 지정한다는 의미이다.

chmod 777로 실행권한을 부여하고,
sh ./파일명이 아니라, 바로 ./paravar.sh로 실행
* if문


* if~else문


* 조건문에 들어가는 비교 연산자



* 파일과 관련된 조건


- 2행: fname 변수에 httpd 서버 실행 파일인 /lib/systemd/system/sshd.service 저장
- 3행: fname 변수에 저장된 /lib/systemd/system/sshd.service 파일이 일반 파일이면 참이므로 5행을 실행하고 그렇지 않으면 거짓이므로 7행을 실행
- 5행: fname에 들어 있는 파일의 앞 5줄 출력

파일 내용 출력 결과
* case~esac문
if문은 참과 거짓이라는 2가지 경우만 사용할 수 있다. 이를 ‘이중 분기’라 한다.
그런데 여러 가지 경우의 수가 있다면 if문을 계속 중복해서 사용해야 하므로 구문이 복잡해진다.
이때 시용하는 것이 case문이다. 이를 ‘다중 분기’라 한다.

- 2행: 첫 번째 파라미터 변수(명령 실행 시 추가한 값)인 $1 값에 따라 3행, 5행, 7행, 9행으로 분기한다. start), stop), restart) 이외의 값은 모두 9행 *) 부분으로 분기한다.
- 4행: 3행에서 start)일 경우에 실행 주의할 점은 맨 뒤에 세미콜론 2개(;; )를 붙여야 한디.
- 9행: 그 외의 모든 상황
- 11행 case문 종료

stop, start 출력 결과
* AND, OR 관계연산자
조건문에는 and와 or의 의미를 갖는 관계 연산자를 사용할 수 있다.
and는 -a 또는 &&, or는 -o 또는 ||를 사용해 표현할 수 있다.
-a나 -o는 테스트문([ ]) 안에 사용할 수 있는데 이때 괄호 등의 특수 문자 앞에는 \를 붙여야 한다.
* 반복문
1) for~in문
for~in문은 변수에 각각의 값을 넣은 후 do 안에 있는 ‘반복할 문장’을 실행한다.
그러므로 값의 개수만큼 반복실행된다.
예제 1)


예제 2)

- 2행: fname 변수에 ls *.sh 명령의 실행 결과를 하나씩 저장해 4~5행을 반복 실행한다. 즉, 파일 개수만큼 실행을 반복한다.
- 4행: 파일이름 출력
- 5행: 파일의 앞 3줄 출력

출력 결과
2) while문
while문은 조건식이 참인 동안 계속 반복한다.
예제 1)

조건식 위치에 [ 1 ] 또는 [ : ]가 오면 항상 참이다.
그러므로 4행을 무한반복한다.

출력 결과
예제 2)

4행: 10보다 작거나 같으면 6~7행 실행
6행: hap에 i의 값을 누적해 저장
7행: i 변수의 값을 1씩 증가

for in문에서 했던 1부터 10까지의 합을 출력하는 예제.
예제 3)

3행: mypass 변수에 값을 입력받음
4행: mypass 변수 값이 1234가 아니면 6~7행 실행, 맞으면 while문 종료
7행: 다시 입력받음

출력 결과
3) break, continue, exit, return


* 사용자 정의 함수

2~5행: 함수 정의
7행: 함수 호출

출력 결과
* 함수 파라미터 사용
함수의 파라미터를 사용하려면 함수를 호출할 때 뒤에 파라미터를 붙이면 된다.
즉 함수 안에 $1, $2와 같은 형식으로 사용하면 된다.

3행: 넘겨받은 파라미터 $1과 $2를 더한 값 출력
6행: 호출할 때 함수 이름에 넘겨줄 파라미터를 공백으로 분리해서 적음

출력 결과
'OS > Linux' 카테고리의 다른 글
| [Linux 서버] 디스크 관련 명령어 정리 (0) | 2025.09.04 |
|---|---|
| [Linux 서버] Shell Script로 RAID 구현 자동화 (0) | 2025.09.02 |
| [Linux 서버] 쿼터(Quota) (0) | 2025.09.02 |
| [Linux 서버] LVM(Logical Volume Manager) (1) | 2025.09.01 |
| [Linux 서버] RAID 0, RAID 1, RAID 5 구현 (2) | 2025.09.01 |