리눅스 쉘 스크립팅 시 필요할 수 있는 반복문, 조건문 등을 추가로 정리해보았다.

인자(args)

다음과 깉이 run.sh 스크립크를 실행할 때, 뒤에는 순서대로 인자를 받을 수 있다.

sh run.sh '2021-10-30' '2021-11-30'

run.sh 내부에서는 두 인자를 순서대로 $1, $2로 표현한다. 즉, 읹의 순서대로 $# 형태로 사용하면 된다.

DATE = $1



변수(variables)

스크립트 내에서 여러번 사용할 변수를 지정하거나, path를 매번 사용하지 않고 위치를 저장하여 사용할 수 있다. 특정 이름으로 path를 지정할 때 export 명령어를 사용하면 된다. 이렇게 사용하면 재사용이 간편해진다.

export HOME=/user/desktop/model

export DATA_DIR=$HOME/data
export CODE_DIR=$HOME/code

위와 같이 model 폴더에서 작업할 때 model/run.sh에서 code 폴더와 data 폴더에 접근할 필요가 있을 때, 다음과 같이 path를 설정하면 훨씬 가독성이 좋다.



반복문(for)

반복문의 기본 형식은 다음과 같다.

for i in '1' '2' '3' '4'; do
    # action

    # 하둡 상의 test-# tsv 파일을 로컬 /user/desktop/model/data 위치로 저장
    hdfs dfs -cat hdfs://user/test/test-$i.tsv > /user/desktop/model/data 
done

action의 위치에서 반복할 내용을 입력하면 된다.



조건문(if)

조건문의 기본 형식은 다음과 같다.

if [ $1 = '2021-11-30']; then
    # action

    hdfs dfs -put -f /user/desktop/model/data/$1.tsv \
                    hdfs://user/test/$1.tsv
fi

만약 첫 번째 인자로 받은 값이 ‘2021-11-30’ 이라면 로컬의 2021-11-30.tsv 파일을 하둡 상으로 저장하는 명령어이다. 참고로 \ 는 스크립트 파일에서 줄을 나눠서 사용할 때 추가해야 한 줄로 인식이 가능하다.

참고로 [ ] 안에는 여러 조건식을 사용할 수 있으며 다음을 참고하면 된다.



함수(function)

스크립트 내에서도 function 등을 사용하여 일종의 모듈화를 진행할 수 있다.

function make_dataset(){
    python3 $CODE_DIR/make_df.py $1
}

make_dataset '2021-11-30'

다음 코드는 make_dataset 함수를 생성하여 호출하고, make_df.py 파이썬 파일을 수행하도록 하는 스크립트이다. 이런 형식으로 수행할 작업을 나눌 수 있다는 점에서 더욱 가독성 높은 스크립트를 작성할 수 있다.