티스토리 뷰

개발기타

쉘스크립트에서 버전 검사 하기

이재원님 2018. 10. 30. 02:13

업무중에 쉘스크립트에서 버전값을 체크할 일이 생겼다. 

예를들어 버전값이 5.2.3~5.2.15 에 해당하는지 확인하는 내용이다. 즉 버전 범위 검사다.


구글링해보니 여러가지 방법들이 나온다.

아래는 그 중에 적당해보이는 3가지로 테스트 해본 스크립트이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/bin/sh
VERSION="5.2.13" #default
 
if [ ! -"$1" ]; then
    VERSION=$1
fi  
 
echo "version is $VERSION"
echo ""
 
# 1) egrep 명령을 이용한 방법 (egrep 은 grep -E 와 동일함)
echo $VERSION | egrep -"^[5].[2].([3-9]|1[0-5])$"
if [ $? == 0 ]; then
    echo "[1] matched. 5.2.3~5.2.15"
fi
 
# 2) cut 명령을 이용한 방법
major=$(echo $VERSION | cut -d. -f1)
minor=$(echo $VERSION | cut -d. -f2)
patch=$(echo $VERSION | cut -d. -f3)
if [ $major == 5 ] && [ $minor == 2 ]; then
    if [ $patch -ge 3 ] && [ $patch -le 15 ]; then
        echo "[2] matched. 5.2.3~5.2.15"
    fi
fi
 
# 3) IFS(internal field separator) 를 이용한 방법
IFS=. TMP=($VERSION)
major=${TMP[0]}
minor=${TMP[1]}
patch=${TMP[2]}
if [ $major == 5 ] && [ $minor == 2 ]; then
    if [ $patch -ge 3 ] && [ $patch -le 15 ]; then
        echo "[3] matched. 5.2.3~5.2.15"
    fi
fi  
cs


테스트 결과 3가지 방법 모두 원하는대로 잘 동작했다.


grep 을 이용하는게 가장 깔끔해보인다. 

하지만, 각 major, minor, patch 버전을 추출하지는 못하기 때문에 필요에 따라 골라서 사용하면 될 듯 하다.

댓글