본문 바로가기

Development/ShellScript | Bash

쉘스크립트 정리 (지속적인 업데이트)

반응형

자주 사용하는 쉘 스크립트를 정리해서 업데이트 하도록 해야겠다. 구글링도.. 귀찮아져간다.. 물론 이 내용 업데이트 할때마다 구글링하겠지만.. ㅋㅋ

1. Split - 문자열 자르기 (쉘스크립트 split)

# 출력
echo "jkun.net" | awk -F '.' '{print $1, $2}'

# 변수에 담기
JKUN_NET_URL_FIRST=$(echo "jkun.net" | awk -F '.' '{print $1}')
JKUN_NET_URL_SECOND=$(echo "jkun.net" | awk -F '.' '{print $2}')

echo $JKUN_NET_URL_FIRST # 첫번째 출력 >> jkun
echo $JKUN_NET_URL_SECOND # 두번째 출력 >> net

2. Function - 함수 (쉘스크립트 function / 쉘스크립트 함수)

# 선언
GET_ATTR(){
    local ATTR_NAME=$1 #첫번째 인자
    local CONF_FILE=$2 #두번째 인자
    echo $(awk -F '=' '/'$ATTR_NAME'/{ print $2 }' $CONF_FILE)
}

# 호출 (install.conf 파일의 INSTALL_PATH 속성값을 반환)
INSTALL_PATH=$(GET_ATTR 'INSTALL_PATH' ./install.conf)

3. 조건문 - 함수 (쉘스크립트 조건문) - 원문 : 핸드오버님 https://hand-over.tistory.com/32

# IF 조건
if [ 값 조건식 값 ]; then

elif [ 값 조건식 값 ]; then

else

fi

# Case 조건
case 값 in
	조건1) echo "조건1";;
    조건2) echo "조건2";;
    ??조건1?? | ??조건2?? | ??조건3??) echo "조건1 이거나 조건2 이거나 조건3 이거나)" #패턴사용
    *) #조건1, 조건2 가 아닐때의 (switch { default: .. } 에 해당)
esac

# 여기서부터 핸드오버님이 정리해놓으신 본문입니다.

비교식
[ -z ${A} ] : A 문자열의 길이가 0이면 TRUE
[ -n ${A} ] : A 문자열의 길이가 0이 아니면 TRUE
[ ${A} -eq ${B} ] : A와 B값이 같으면 TRUE
[ ${A} -ne ${B} ] : A와 B값이 다르면 TRUE
[ ${A} -gt ${B} ] : A가 B보다 크면 TRUE
[ ${A} -ge ${B} ] : A가 B보다 크거나 같으면 TRUE
[ ${A} -lt ${B} ] : A가 B보다 작으면 TRUE
[ ${A} -le ${B} ] : A가 B보다 작거나 같으면 TRUE

[ 조건식A -a 조건식B ] : 조건식 A와 B가 모두 TRUE이면 TRUE (&& 와 동일)
[ 조건식A -o 조건식B ] : 조건식 A가 TRUE거나 조건식B가 TRUE면 TRUE (|| 와 동일)

파일관련
[ -d ${A} ] : A 파일이 디렉토리면 TRUE
[ -e ${A} ] : A 파일이(노드, 디렉토리, 소켓 등등 모두) 존재하면 TRUE
[ -L ${A} ] : A 파일이 심볼릭 링크면 TRUE
[ -r ${A} ] : A 파일이 읽기 가능하면 TRUE
[ -s ${A} ] : A 파일의 크기가 0 보다 크면 TRUE
[ -w ${A} ] : A 파일이 쓰기 가능하면 TRUE
[ -x ${A} ] : A 파일이 실행 가능하면 TRUE
[ -c ${A} ] : A 파일이 Special character file 이면 TRUE
[ -f ${A} ] : A 파일이 디렉토리가 아닌 일반 regular 파일이면 TRUE
[ -S ${A} ] : A 파일이 소켓이면 TRUE
[ ${A} -nt ${B} ] : A 파일 B 파일보다 최신파일이면 참
[ ${A} -ot ${B} ]  : A 파일이 B 파일보다 이전파일이면 참
[ ${A} -ef ${B} ] : A 파일과 B 파일이 같은 파일이면 참

-eq : EQual
-ne : NEgative
-gt : Greater Than
-ge : Greater than Equal
-lt : Less Than
-le : Less than Equal
-d : Directory
-e : Exist
-L : symbolic Link
-r : Readable
-w : Writeable
-x : eXecute
-nt : Newer Than
-ot : Older Than
-ef : Equal File

4. For Loop (쉘스크립트 반복문)

# Normal
for (( i=0; i < $#; i++ ))
do
	echo $i
done

## 실행 파라미터 전체 조회 (arguments)
# ex) ./ex.sh jkun . net
for arg in "$@"
do
    echo "$arg"
    # >> jkun
    # >> .
    # >> net
done

## 현재 경로에 있는 파일 목록을 불러와 loop 로 출력하며 형식을 3항연산으로 구분 (디렉토리 / 폴더)
for files in ./*
do
	echo "$files : " $([[ -d $files ]] && echo "D" || echo "F")
done

for ports in 8080 8081
do
	echo "PORT : $ports"
done

for i in $(seq 1 10)
do
   echo "seq value :: $i"
done

 

반응형