컴퓨터활용/유닉스

일괄컴파일 쉘

멜번초이 2008. 10. 11. 23:55
반응형

일괄 컴파일 하는 예제 쉘

1
2
3
4
5
6
7
8
9
10
touch *.pc
 
ls_lst=`ls *.pc | cut -c8-72 |cut -d"." -f1-1`
for ls_one in ${ls_lst};  do
    echo ' '
    echo '============[ '$ls_one' ]============'
    rebuild_dbiolib $ls_one
done
 
echo ' E N D'
cs

----- 다른 예제 ---

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
37
#!/usr/bin/ksh
 
MAPF='
PfmLinkFet000
PfmSvcFet000
PfmSvcExtFet000
PfmSmFet000
PfmSmExtFet000
'
 
MAPS='
PfmLinkSel000
PfmSvcSel000
PfmSvcExtSel000
PfmSmSel000
PfmSmExtSel000
'
 
fail_list=''
fail_cnt=0
 
for i in $MAPS; do
    echo $i
    rebuild_dbiolib $i
    if [ $? -ne 0 ]; then
        fail_list="$fail_list $i"
        ((fail_cnt+=1))
    fi
done
 
if [ $fail_cnt -ne 0 ]; then
    echo 'Failed maps: '$fail_list
else
    echo 'All succeeded'
fi
 
exit 0
cs

 

실제 예제

다음예제는 특정 디렉토리의 .c 파일만 모두 읽어서 컴파일 하는 쉘을 불러서 하나씩 컴파일 해 나가고 성공여부를 별도로 지저한 로그파일에다가 남겨주는 쉘이다. 
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/ksh
#----------------------------------------------------------#
# 작성자 : 최성환  작성일:2010.7.10 
# 사용법 : 아래와 같이팀코드를 TN에 먼저 지정해 줘야 함.  
#          export TN=xxx 
#          컴파일결과 log 파일은 자기 홈디렉토리에 생김 
#----------------------------------------------------------#
 
#----------------------------------------------------------#
# 대문자 변환
#----------------------------------------------------------#
Uppercase()
{
     echo $* | tr "[a-z]" "[A-Z]"
}
#----------------------------------------------------------#
# 소문자변환
#----------------------------------------------------------#
Lowercase()
{
     echo $* | tr "[A-Z]" "[a-z]"
}
 
#----------------------------------------------------------#
# msg function
#----------------------------------------------------------#
msg()
{
    echo $1 1>>$logname 2>&1
    if [ "$2" = "ECHO" ]; then
        echo $1
    fi
}
 
#----------------------------------------------------------#
# Usage
#----------------------------------------------------------#
# 입력 된 아규먼트 개수를 체크한다
#----------------------------------------------------------#
#if [ $# -ne  1 ] 
#then
#    echo "\nUsage : $0 [deptlist file]"
#    echo " \n"
#    exit
#fi
 
#----------------------------------------------------------#
# 팀리스트 파일을 읽어서 팀개수만큼 돈다
#----------------------------------------------------------#
#for team_one in ${team_lst};  do
comp()
{
    sm_lst=`ls  $SRC_DIR`
    for sm_one in ${sm_lst};  do
        EXT=`echo $sm_one|cut -d"." -f2-2`
        if [ $EXT = "c" ]; then
                 echo '\n====['$SRC_DIR/$sm_one'] compiling.... ========'
 
                cccmp.sh $sm_one    # 컴파일 쉘 
 
                if [ $? -ne 0 ]; then
                    msg "오류 $SRC_DIR/$sm_one"
                else
                    msg "성공 $SRC_DIR/$sm_one"
                fi
         fi
    done
}
 
#----------------------------------------------------------#
# 작업일자를 구함 
#----------------------------------------------------------#
today=`date '+%Y/%m/%d %H:%M:%S'`
today2=`date '+%Y%m%d_%H%M%S'`
 
#----------------------------------------------------------#
# 팀명을 대소문자로 변환해 놓음
#----------------------------------------------------------#
U_TEAM_NAME=$(Uppercase $TN)
L_TEAM_NAME=$(Lowercase $TN)
 
#----------------------------------------------------------#
# 로그파일을 초기화
#----------------------------------------------------------#
logname=~/make_${L_TEAM_NAME}_all.log
> $logname
rm -f $logname
 
#----------------------------------------------------------#
# 메시지파일의 헤더를 작성
#----------------------------------------------------------#
msg "============================================="
msg "프로그램  일괄컴파일 결과"
msg "컴파일작업일시 : $today"
msg "============================================="
 
SRC_DIR=$FWROOTDIR/$TN/srco
comp
 
SRC_DIR=$FWROOTDIR/$TN/srcg
comp
 
cat  $logname
 
echo '============== E N D ===============' 
cs

 실행한 결과 로그 파일은 이렇게 생성된다.

1
2
3
4
5
6
7
8
9
10
=============================================
프로그램 일괄컴파일 결과
컴파일작업일시 : 2008/08/16 12:44:56
=============================================
성공 /nbs/app/xxx/srco/XXX1100.c
성공 /nbs/app/xxx/srco/XXX3001.c
성공 /nbs/app/xxx/srco/XXX9199.c
성공 /nbs/app/xxx/srcg/XXX_CALC_OFR.c
성공 /nbs/app/xxx/srcg/XXX_INF_INQ_OFR.c
성공 /nbs/app/xxx/srcg/XXX_NML_CALC.c
cs
 


반응형