쉘 스크립트의 return은 다른 언어와 다르게 작동한다는 것을 듣고 gpt의 도움을 받아 실습해보고자 했다!
우선, 쉘 스크립트의 함수에서 return은 값을 반환하지 않고 상태코드 (0~255)을 반환한다.
함수가 성공적으로 실행되었는지 나타나는데 쓰인다. 일반적으로 0은 성공, 0이 아닌 값은 실패를 의미한다.
고로 쉘 스크립트에서 return은 숫자를 반환해서 그냥 문자열을 넣으면 에러가 발생한다.
1. return 에 숫자를 넣을 경우
my_function() {
echo "Hello, World!"
return 0 # 성공을 의미
}
my_function
echo $? # 0이 출력됨
2. return 에 문자열을 넣을 경우
my_function() {
return "Hello, World!"
}
my_function
결과
./script.sh: line 2: return: Hello,: numeric argument required
그러나 쉘 스크립트로 무중단 배포를 구현할 때, nginx를 사용하여 새로운 버전의 애플리케이션을 배포하는 동안 문자열을 반환하고 싶을 수 있는 몇 가지 상황이 있을 수 있다.
예를 들어, 배포 과정에서 상태를 확인하고 싶다거나, 환경 설정 값을 반환한다거나 로그 메시지를 반환하는 등 !
이런 경우를 위해 문자열을 반환하는 방법이 몇가지 있다.
1. 명령 치환 (가장 흔하게 사용되는 방법)
my_function() {
local result="Hello, World!"
echo "$result"
}
result=$(my_function)
echo "$result" # "Hello, World!" 출력됨
2. 백틱 사용(구식)
my_function() {
local result="Hello, World!"
echo "$result"
}
result=`my_function`
echo "$result" # "Hello, World!" 출력됨
3. 전역 변수 사용
result=""
my_function() {
result="Hello, World!"
}
my_function
echo "$result" # "Hello, World!" 출력됨
코드가 간단할 때에는 가장 편할거같지만 함수가 좀만 복잡해지면,,, 안전하지 않을 것 같다.
'IT > 서버' 카테고리의 다른 글
Prometheus, Grafana, Node Exporter 서버 모니터링 툴 적용 (1) | 2024.06.15 |
---|---|
서버 모니터링 툴 리서치 (0) | 2024.06.13 |
마운트 관련 에러 error : Transport endpoint is not connected (0) | 2023.02.13 |