해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
Introduction to Bash Scripting의 chapter 4에 대한 내용입니다.
해당 포스팅에는 아래의 내용을 포함하고 있습니다.
- function in Bash script
- scope in Bash script
- Cron에 job 추가하기
1. Basic functions in Bash
Bash script에서 함수를 생성하는 방법을 다룹니다. Bash에서 함수의 형태는 다음과 같습니다.
#1
function_name () {
#function_code
return #something
}
#2
function function_name {
#function_code
return #something
}
#3
function function_name () {
#function_code
return #something
}
대부분의 내용은 비슷하지만, return은 다른 언어와는 다르게 동작합니다. 해당 내용에 대해서는 다음 강의에서 소개합니다. 위의 방법을 통해 bash script에서 function을 사용할 수 있습니다.
function print_hello () {
echo "Hello world!"
}
# call the function
print_hello
> Hello world!
간단하게 hello world를 출력하는 함수를 만들어 보면, 아래와 같이 print_hello로 함수를 호출하게 되고, 우리가 작성한 함수 코드대로 echo부분이 실행됩니다.
temp_f=30
function convert_temp () {
temp_c=$(echo "scale=2; ($temp_f - 32) * 5 / 9" | bc)
echo $temp_c
}
convert_temp
> -1.11
이전에 배웠던 내용들을 토대로 화씨를 섭씨로 변경하는 함수를 간단하게 작성해봤습니다.
2. Arguments, return values, and scope
scope는 굉장히 중요합니다. 이전에 python 강의에서도 global, local, nonlocal의 차이를 소개하고 있었는데, 여기서는 global과 local에 대해 이야기합니다. Bash는 기본적으로 모든 변수가 global 변수입니다. 그래서 만약 변수의 범위를 제한하고 싶다면 'local' 명령어를 사용할 수 있습니다.
function print_filename {
local first_filename=$1
}
print_filename "LOTR.txt" "model.txt"
echo $first_filename
> #공백
위에 보시는 것처럼 local 변수로 지정한 first_filename을 출력했을 때, 아무것도 안나오는 것을 확인할 수 있습니다. 전역 변수에서는 해당 변수에 대한 정보가 없기 때문입니다.
함수 내의 인수를 밖에서도 확인하고 싶을 때는 여러 가지 방법이 존재합니다. 첫 번째로 전역 변수로 할당하는 방법이 있습니다. 두 번째, shell 내부에서 echo를 통해 해당 변수를 출력할 수 있습니다.
function convert_temp {
echo $(echo "scale=2; ($1 - 32) * 5 / 9" | bc)
}
converted=$(convert_temp 30)
echo "30F in Celsius is $converted C"
> 30F in Celsius is -1.11 C
위의 예시처럼 출력 값을 $를 통해 변수에 할당하고 할당한 변수를 출력하는 형태로 결과 값을 구할 수 있습니다.
3. Scheduling your scripts with Cron
Schedule scripts를 사용할 경우 효과적이라고 설명합니다. 이전의 강의들에서 충분히 설명했기에 추가로 알게 된 내용을 위주로 정리했습니다.
crontab에 원하는 명령을 넣어주기 위해서는 아래와 같은 형식에 맞게 넣어줘야 합니다.
* * * * * bash myscript.sh
# 30분마다 실행
*/30 * * * * bash myscript.sh
0,30 * * * * bash myscript.sh
이전 강의에서 소개한 것 이외에도 동일 시간내에 여러번 반복해야 하거나 일정 기간으로 실행해야 할 때, 위의 처럼 사용할 수 있습니다.
crontab에 추가하기 위해서 crontab -e로 가지고 있는 cronjobs을 수정할 수 있습니다. 만약 처음으로 cronjob이 없다면, nano 편집기나 vi 편집기 등을 활용해서 작성할 수 있습니다. 그렇게 열린 crontab에 원하는 스케쥴을 포함하여 저장하면 됩니다. crontab -l을 통해서 cronjob이 잘 추가되었는 지 확인할 수 있습니다.