LabHub
배우기 러닝패스 코스

Shell Scripting

Writing Your First Shell Script

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

셸 스크립트의 뼈대(셔뱅·실행 권한·인자·환경변수·조건 분기·종료 코드)를 한 바퀴 돌립니다.

왜 중요한가

스크립트는 사람이 아니라 다른 프로그램이 호출합니다. 그래서 출력 스트림과 종료 코드가 인터페이스입니다. 결과는 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 labhubHi, labhub!, 설정이 없으면 Hello, GREETING=Yo greet.shYo, 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 가 아닌 값이면 종료 코드 3
    • prod 또는 stagedeploying to <값> 을 출력하고 종료 코드 0

참고

스크립트 파일과 셔뱅

/root/bin/greet.sh 를 만들고 첫 줄을 #!/bin/bash 로 하세요.

첫 줄의 #! 는 커널에게 이 파일을 어떤 인터프리터로 실행할지 알려 주는 표시입니다.

실행 권한 주기

그 파일에 실행 권한을 주세요.

chmod +x 로 실행 비트를 켭니다.

인자를 받아 출력하기

greet.sh labhub 를 실행하면 정확히 Hello, labhub! 를 출력하게 하세요.

첫 번째 위치 인자는 $1 입니다. 쉼표와 느낌표 위치까지 정확히 맞춰야 합니다.

인자 기본값 처리

인자 없이 실행하면 Hello, world! 가 되도록 기본값을 넣으세요. 인자를 주면 여전히 그 인자가 쓰여야 합니다.

${1:-기본값} 문법을 쓰면 인자가 없을 때만 기본값이 쓰입니다. 인자가 있으면 그대로 살아 있어야 합니다.

환경변수로 인사말 바꾸기

환경변수 GREETING 이 설정돼 있으면 인사말을 그 값으로 바꾸세요. GREETING=Hi greet.sh labhubHi, labhub!, 설정이 없으면 Hello, GREETING=Yo greet.shYo, world! 가 되어야 합니다.

환경변수와 위치 인자 둘 다 기본값 처리가 필요합니다. 서로 간섭하지 않아야 합니다.

파일 종류 판별하기

/root/bin/checkfile.sh <경로> 를 만드세요. 일반 파일이면 file, 디렉터리면 dir, 없으면 missing 을 출력합니다.

-f, -d 는 각각 일반 파일과 디렉터리를 검사합니다. 순서를 잘못 두면 디렉터리가 missing 으로 빠질 수 있습니다.

점수 등급 매기기

/root/bin/grade.sh <점수> 를 만드세요. 90 이상 A, 80–89 B, 70–79 C, 그 미만 F.

경계값이 함정입니다. 90 과 89, 80 과 79, 70 과 69 를 각각 손으로 확인하세요.

환경변수 검증과 종료 코드

/root/bin/deploy.sh 를 만드세요. 환경변수 APP_ENV 를 읽어서

표준출력과 표준에러를 구분하고, 상황별로 다른 종료 코드를 반환해야 합니다. exit 뒤의 숫자가 규약입니다.