셸 스크립팅 · 변수와 조건 · 실습
첫 셸 스크립트 만들기
목표
셸 스크립트의 뼈대(셔뱅·실행 권한·인자·환경변수·조건 분기·종료 코드)를 한 바퀴 돌립니다.
왜 중요한가
스크립트는 사람이 아니라 다른 프로그램이 호출합니다. 그래서 출력 스트림과 종료 코드가 인터페이스입니다. 결과는 stdout, 오류와 사용법은 stderr, 성공/실패는 종료 코드 - 이 규약을 지켜야 result=$(script.sh) 같은 사용법이 성립하고 CI 가 실패를 감지할 수 있습니다. 사용법 안내를 stdout 으로 내보내는 순간 그것이 곧 결과값이 되어 버립니다. 그리고 설정은 환경변수로 넘기고 없으면 합리적인 기본값으로 도는 형태가 배포 자동화의 표준입니다.
단계
1. /root/bin/greet.sh 를 만들고 첫 줄을 #!/bin/bash 로 하세요.
2. 그 파일에 실행 권한을 주세요.
3. greet.sh labhub 를 실행하면 정확히 Hello, labhub! 를 출력하게 하세요.
4. 인자 없이 실행하면 Hello, world! 가 되도록 기본값을 넣으세요. 인자를 주면 여전히 그 인자가 쓰여야 합니다.
5. 환경변수 GREETING 이 설정돼 있으면 인사말을 그 값으로 바꾸세요. GREETING=Hi greet.sh labhub 는 Hi, labhub!, 설정이 없으면 Hello, GREETING=Yo greet.sh 는 Yo, world! 가 되어야 합니다.
6. /root/bin/checkfile.sh <경로> 를 만드세요. 일반 파일이면 file, 디렉터리면 dir, 없으면 missing 을 출력합니다.
7. /root/bin/grade.sh <점수> 를 만드세요. 90 이상 A, 80~89 B, 70~79 C, 그 미만 F.
8. /root/bin/deploy.sh 를 만드세요. 환경변수 APP_ENV 를 읽어서
- 없으면 표준에러에 안내를 내고 종료 코드
2 prod/stage가 아닌 값이면 종료 코드3prod또는stage면deploying to <값>을 출력하고 종료 코드0
참고
${1:-world}는 첫 번째 인자가 없거나 비었을 때만 world 를 씁니다.echo "메시지" >&2로 표준에러에 씁니다.- 흔한 실수 1: 5번에서 환경변수 기본값을 넣느라 위치 인자를 덮어쓰면 4번이 깨집니다. 둘은 독립적으로 동작해야 합니다.
- 흔한 실수 2: 7번에서
>=대신>를 쓰면 90 이 B 로 떨어집니다. 경계값을 하나씩 손으로 넣어 보세요.
단계 8개
- 스크립트 파일과 셔뱅
- 실행 권한 주기
- 인자를 받아 출력하기
- 인자 기본값 처리
- 환경변수로 인사말 바꾸기
- 파일 종류 판별하기
- 점수 등급 매기기
- 환경변수 검증과 종료 코드