본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

31. 쉘 스크립트 - 조건문과 반복문

by devraphy 2021. 9. 24.

0. 시작하기전에

- 이전 포스팅에서는 조건문에 대해서 배웠다.

- 이번 포스팅에서는 조건문을 포함한 추가적인 지식들과 반복문에 대해서 배워보자. 


1. 파일 상태에 따른 조건문

- 파일의 상태에 따라서 조건문을 만들 수 있다. 

- 파일 상태를 확인하는 쉘 스크립트는 다음과 같다.

 

 

a) 실습예제 

- 파일의 존재유무에 따른 조건문을 가진 프로그램을 작성해보자. 

#!/bin/bash

if [ -e $1 ]
then
        echo "file exist"
fi

출력결과


2. 논리 연산자

- 쉘 스크립트의 논리연산자는 다음과 같이 사용할 수 있다.


3. if~else 구문

- 쉘 스크립트에서 if ~ else 구문은 다음과 같이 작성할 수 있다.

#!/bin/bash

if [ 조건문 ]
then
   명령어
else
   명령어
fi

 

 

a) 실습예제

- if~else 문을 사용하여 두 인자값이 같으면 'same values'를, 다르면 'different values'를 출력하는 프로그램을 작성해보자.

#!/bin/bash

if [ $1 -eq $2 ]
then
        echo "same values!"
else
        echo "different values!"
fi

 

출력결과


4. 조건문 한줄에 작성하기

- if문을 한줄에 작성하는 방식은 다음과 같다.

if [ 조건 ]; then 명령문; fi

#예시
if [ -z $1 ]; then echo "Insert arguments"; fi

- 조건문이 작성되는 대괄호의 시작과 끝에는 공백이 입력 되어야한다.

- 대괄호 내부에 비교 및 논리 연산자를 사용할 때, 에러가 나는 경우에는 괄호를 두겹 [[ ]] 으로 작성하면 해결될 수도 있다.  

 


5. Ping 

   - 서버는 여러개의 컴퓨터가 인터넷으로 연결되어 있다. 

   - 각 서버는 컴퓨터 간의 연결이 살아있는지 확인해보기 위해서 ping이라는 일종의 안부인사 메세지를 날린다.

   - 각 서버의 ip주소를 기반으로 ping이 전달되면, 해당 ip 주소의 컴퓨터로부터 응답이 회신된다. 

   - 일정 시간안에 서버로 부터 응답이 오지 않는다면, 해당 서버는 정상적으로 동작하고 있지 않음을 의미한다. 

 

▶ ping -c 1

   - ping을 한번만 보내서 확인하라는 의미다.

 

 

▶ ping -c 1 192.168.0.1 

   - ping을 보낼 ip 주소를 입력한다. 

 

 

▶ ping -c 1 192.168.0.1 1>

   - ip주소 다음에 숫자 1> 은 표준 출력을 리다이렉트 하라는 의미다. (이전에 배운 내용입니다.)

   - 0을 입력하면 표준 입력

   - 2를 입력하면 표준 에러

   - 꺽쇄(>)는 꺽쇄 다음에 나올 주소로 리다이렉션 하라는 의미다.

 

 

▶ ping -c 1 192.168.0.1 1> /dev/null

   - /dev/null은 null 디바이스라고 해서 아무 동작도 하지 않는 디바이스다.

   - 즉, 해당 디바이스로 리다이렉션을 한다면 아무 동작도 하지 않는다는 뜻이다. 

   - 쉘 스크립트를 해석해보면, 해당 ip주소로 ping을 1번만 날려서 확인하고 응답은 null 디바이스로 리다이렉션하라는 의미다.

 

 

b) 예제

#!/bin/bash
ping -c 1 127.0.0.53 1> /dev/null # 구글 서버에게 핑을 보내보자!
if [ $? == 0 ]
then
        echo "게이트웨이 핑 성공!"
else
        echo "게이트웨이 핑 실패!"
fi

- $?는 가장 최근에 실행된 쉘 스크립트의 결과값을 저장하는 변수다. 

- ping의 결과값이 0이라는 의미는 서버로부터 응답을 성공적으로 받았다는 말이다.

- ping의 결과값이 0이 아니라면 서버로부터 응답을 받지 못했다는 의미다. 

 

- 위의 예제에서 사용된 ip주소는 구글의 ip주소다. 실행결과는 다음과 같다. 

 

- 만약 다른 도메인서버의 ip주소에게 ping을 보내보고 싶다면, nslookup을 사용하여 ip주소를 확인할 수 있다.


6. for 반복문

- 기본적인 for 반복문은 다음과 같은 문법을 가진다. 

#!/bin/bash

for 변수 in 변수값1 변수값2 ...
do
   명령문
done

 

 

a) 실습예제

- 현재 디렉토리의 파일명을 반복문을 이용하여 출력해보자. 

#!/bin/bash

for data in $(ls)
do
 echo $data
done

 

 

b) 반복문 한줄로 작성하기

- 위의 예제에서 사용된 반복문을 한줄로 작성해보자. 

# 예시 1
for data in $(ls); do
   echo $data
done

# 예시 2
for data in $(ls); do echo $data; done

 


7. while 반복문

- 기본적인 while 반복문은 다음과 같은 문법으로 작성한다.

while [ 조건문 ]
do
   명령문
done

 

a) 실습예제

- while문을 이용하여 현재 디렉토리의 파일명을 출력해보자.

#!/bin/bash

filelist=$(ls)
length=${#filelist[@]}
index=0

while [ $index -le $length ]
do
        echo ${filelist[$index]}
        index=`expr $index + 1`
done

 

댓글