Bash 스트립트에서 기본 함수 빌드하기
bash script에서의 함수 형태
function 함수이름 () {
내부코드 # 이전에 배운 루프, 조건문, shell-in-a-shell 모두 가능
return 반환값
}
예제1
function print_hello () {
echo "Hello World!"
}
print_hello
Hello World!
예제2
화씨에서 섭씨로 변환하는 함수 만들기
temp_f=30
function covert_temp () {
temp_c=$(echo "scale=2; ($temp_f -32) * 5 / 9" | bc)
echo $temp_c
}
convert_temp
-1.11
인수, 반환값, 스코프
function print_filename {
echo "The first file was $1"
for file in $@
do
echo "This file has name $file"
done
}
print_filename "LOTR.txt" "mod.txt" "A.py"
앞에서 배운대로 ARGV
값에 접근하는 것과 같다.
일반적으로 다른 프로그래밍 언어에서는 변수의 스코프(전역/지역)에 따라 접근이 가능/불가능한데, bash에서는 기본적으로 global
하게 변수들이 잡힌다.
지역변수로 제한하고 싶으면 local
명령을 사용해야한다.
function print_filename {
local first_filename=$1
}
print_filename "LOTR.txt" "model.txt"
echo $first_filename
$first_filename
을 local로 제한했기 때문에 접근할 수 없어서 빈 줄이 출력된다.
또한, Bash의 함수 return은 특정 값을 반환하는 것이 아니라 그 함수의 수행 성공(0)과 실패(1-255)를 반환한다.
이 값은 $?
변수에 저장된다.
function function-2 {
echlo # error
}
function_2
echo $? #function_2에 대한 에러를 반환한다.
script.sh: line 2: echlo: command not found 127
Cron을 사용해서 일정에 따라 실행되도록 프로그래밍 하는 방법
cron
은 crontab
이라는 것에 의해 구동된다.
실행 코드와 시기를 crontab에 알려주는 cronjobs
가 포함되어 있다.
crontab -l #현재 프로그래밍 한 일정을 확인할 수 있다.
cronjob 예제
5 1 * * * bash myscript.sh
매달 매일 오전 1시 5분에 myscript.sh 를 수행한다.
15 14 * * 7 bash myscript.sh
매주 일요일 오후 2시 15분에 myscript.sh를 수행한다.
cronjob 구조의 장점
특정 시간마다 여러번 프로그램을 실행할 수 있고 일정 시간 단위로 실행도 가능하다.
15,30,45 * * * *
로 설정하면 매 시간 15분 30분 45분에 수행된다.
*/15 * * * *
로 설정하면 매시간 15분 마다 수행된다.
cronjob 사용 예제
extract_data.sh
라는 파일을 매일 오전 1시 30분에 수행되도록 등록하려고 한다.
crontab -e
를 사용해서 cronjobs를 편집한다.- 어떤 편집기를 사용할 것인지 선택한다.
- cronjob생성
- 매일 오전 1시 30분이니까
30 1 * * * extract_data.sh
로 등록
- 매일 오전 1시 30분이니까
- crontab 저장 및 종료
- 올바르게 프로그래밍 되었는지 확인
crontab -l
→30 1 * * * extract_data.sh
나오면 성공
Uploaded by Notion2Tistory v1.1.0