OS/Linux

[Linux 서버] Shell Script Programming

JooRi 2025. 9. 2. 09:46
728x90
반응형
SMALL

 

* 환경 변수 확인 : 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행: 호출할 때 함수 이름에 넘겨줄 파라미터를 공백으로 분리해서 적음

 

 

출력 결과

 

 

728x90
반응형
LIST