OS/Linux

Shell script 문자열 앞뒤 공백 지우기 (trim)

호형 2020. 6. 17. 15:22

지난번에 "Jenkins에서 Build FAILURE 시 특정 위치에 로그남기기"를 하며 거기에서 사용된 Shell Script가 있다. 

 

 

Jenkins에서 Build FAILURE 시 특정 위치에 로그 남기기

Jenkins에서 빌드를 하던지 배치를 돌리던지 할때 오류가 발생을 할 수 있다. 이때 오류에 대해서 즉각 noti를 받고 싶은 경우라면 일반적으로는 Jenkins와 연동이 되는 email noti를 받던지 slack을 통해�

oingdaddy.tistory.com

 

여기에 나온 Shell Script 는 다음과 같다. 

 

#! /bin/bash

jobstatus=$(cat /app/cqm/mbr/ci/log/jenkins.log | tail -1 | cut -f 3 -d':')

if [ "${jobstatus:1}" == "FAILURE" ];then
        jobname=$(cat jenkins.log | tail -1 | cut -f 2 -d':' | cut -f 1 -d'#')
        trimjobname=${jobname:1:-1}
        echo ${trimjobname}" is Failed"
        cat /app/cqm/mbr/ci/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log
        cat /app/cqm/mbr/ci/data/jobs/"${trimjobname}"/builds/lastFailedBuild/log >> /app/logs/qms/jenkins/error_`date +%Y%m%d%H%M`_"${trimjobname}".log

else
        echo "success"
fi 

 

여기서 7 line의 trimjobname 을 구하는 과정에서 

 

trimjobname=${jobname:1:-1}

 

이렇게 간단히 구현을 할수 있었다. 해석하자면 jobname의 1번째부터 뒤에서 1번째까지를 가져와라 라는 뜻이다. 물론 0번째가 존재해서 실제로는 문자열의 2번째 글자부터라고 이해하면 된다. ' abcdefg ' 라고 있으면 'abcdefg' 로 앞뒤 공백을 제거하고 순수 문자열만 가지고 오는것이다. 하지만 이게 os에 따라 안되는 경우가 있다. -1을 인식을 못하는데 ${jobname:1: -1} 이처럼 -1 앞에 공백을 한칸 줘보라는 글도 있어서 해봤는데 마찬가지로 먹히지 않는다. 또한 앞뒤 공백 제거를 위해 ${jobname} | sed -e 's/^ *//g' -e 's/ *$//g'  이렇게도 써봤는데 먹히지를 않았다.

 

그래서 약간 방법을 달리 해서 해결을 했다. 

 

jobnamelength=${#jobname}
trimjobname=${jobname:1:jobnamelength-2}

 

위의 trimjobname=${jobname:1:-1} 이거 한줄 대신에 이렇게 두줄로 풀어서 -1을 하지 않게 만들었다. 이렇게 바꾸니 잘 된다. shell에서 문자열의 길이를 구할때는 위처럼 ${#문자열} 으로 구할 수 있다. 

 

끝!