[Linux 셸 스크립트] bash - 125 for 반복문을 간단히 작성하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] bash - 125 for 반복문을 간단히 작성하기

by 찬찬이 아빠 2021. 7. 6.
반응형
  1. 사용 명령어

(1) ping

(2) echo 

 

 

  2. 키워드 & 사용처

(1) 키워드

브레이스 확장, bash

 

(2) 사용처

IP 주소 목록 등을 브레이스 확장으로 간단히 작성하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./bash-brace.sh
[OK] Ping -> 192.168.2.1
[OK] Ping -> 192.168.2.2
[OK] Ping -> 192.168.2.3
[OK] Ping -> 192.168.2.4
[OK] Ping -> 192.168.2.5

 

 

  4. 스크립트

#!/bin/bash

 

# bash 브레이스 확장 {}으로 IP 주소 목록 작성

for ipaddr in 192.168.2.{1..5}         

do

    ping -c 1 "$ipaddr" > /dev/null 2>&1

 

    if [ $? - eq 0 ]; then

        echo "[OK] Ping -> $ipaddr"

    else

        echo "[NG] Ping -> $ipaddr"

    fi

done

 

 

  5. 해설

이 스크립트는 ping 명령어를 대상 IP 주소에 실행해서 그 결과를 OK/NG로 표시합니다. 대상 IP 주소 작성은 bash 브레이스 확장(Brace Expansion)을 이용합니다.

 

여기에서는 브레이스 확장 기능을 위해 스크립트를 간략화해서 ping 명령어를 1회만 실행해서 응답을 확입합니다.

 

bash 브레이스 확장은 {}로 싼 문자열을 확장하는 문법입니다. 다음 몇 가지 예를 살펴보는데 쉼표로 구분해서 문자열을 나열하는 표현과 점 두 개(..)로 범위를 지정하는 표현이 있습니다. 어느 쪽이라도 직감적으로 알 수 있을 것입니다.

$ echo index.{php,htm,html}          <- 쉼표로 문자열 지정. 목록을 의미
index.php index.html index.html

$ echo 192.168.2.{1..5}          <- 숫자를 점 두 개로 범위 지정. 1에서 5까지를 의미
192.168.2.1 192.168.2.2 192.168.2.3 192.168.2.4 192.168.2.5

$ echo host-{a..c}.example.com        <- 문자열을 점 두 개로 범위 지정. a에서 c까지를 의미
host-a.example.com host-b.example.com host-c.example.com

브레이스 확장은 스페이스로 나뉜 문자열 목록을 얻게 되므로 이것을 for문의 in에 직접 지정할 수 있습니다. 잘 쓰면 무척 편리한 기능이므로 기억해두기 바랍니다.

 

은 IP 주소 목록 작성에 브레이스 확장을 사용합니다. 여기서는 192.168.2.1에서 192.168.2.5까지 확인하므로 네 번재 옥텟에 브레이스 확장을 이용합니다. 실행 시 192.168.2.1 ~ 192.168.2.5로 변환되어서 이 IP 주소에 순서대로 ping 명령어를 실행합니다.

 

브레이스 확장은 여러 개 사용할 수 있으므로 예를 들어 다음처럼 192.168.0.0/16이라는 네트워크에 속한 모든 IP 주소 목록을 작성할 수 있습니다.

#!/bin/bash

for ipaddr in 192.168.{0..255{.{0..255}
do
    echo "$ipaddr"
done

이런 브레이스 확장을 이용하면 다양한 목록을 간단히 작성할 수 있습니다.

IP 주소나 파일명 생성에 이용하기 바랍니다.

 

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글