iBetter Books
수정

사용자 입력 (read)

지금까지 만든 스크립트는 값을 스크립트 안에 직접 넣거나 인자로 받았습니다. 그런데 스크립트를 실행하는 도중에 사용자에게 무언가를 물어보고 싶을 때도 있습니다. read 명령어가 그 역할을 합니다.

read 기본 사용법

read 변수명

이 줄이 실행되면 스크립트가 멈추고 사용자의 입력을 기다립니다. 엔터를 누르면 입력한 내용이 변수에 저장되고 스크립트가 계속 진행됩니다.

#!/bin/bash# 새 파일: scripts/read_basic.shecho "이름을 입력하세요:"read nameecho "안녕하세요, ${name}님!"exit 0
$ bash scripts/read_basic.sh
이름을 입력하세요:
ibetter
안녕하세요, ibetter님!

read 옵션

read에는 편리한 옵션들이 있습니다.

-p 옵션: 프롬프트 메시지

입력 전에 출력할 메시지를 -p 옵션으로 한 줄에 작성할 수 있습니다.

read -p "이름을 입력하세요: " name

echo로 따로 출력할 필요가 없어서 코드가 간결해집니다.

-s 옵션: 비밀 입력 (화면에 표시 안됨)

read -sp "비밀번호: " passwordecho ""    # 비밀번호 입력 후 줄바꿈

-s를 붙이면 입력하는 내용이 화면에 표시되지 않습니다. 비밀번호, API 키 같은 민감한 정보를 받을 때 씁니다. 입력 후 줄바꿈이 없으므로 echo ""를 별도로 추가해서 다음 줄로 넘깁니다.

-t 옵션: 타임아웃

if read -t 10 -p "10초 안에 입력하세요: " answer; then  echo "입력받음: ${answer}"else  echo "시간이 초과되었습니다."fi

지정한 시간(초) 안에 입력이 없으면 read는 실패(종료 코드 1)를 반환합니다. 자동화 스크립트에서 사용자가 없을 때 무한정 기다리는 것을 방지합니다.

-n 옵션: 글자 수 제한

read -n 1 -p "계속하려면 아무 키나 누르세요: " keyecho ""

-n 1은 한 글자를 입력하는 즉시 엔터 없이 진행합니다. "아무 키나 누르세요" 형태의 대기 구현에 유용합니다.

여러 변수 동시 읽기

read 하나로 여러 변수를 동시에 받을 수 있습니다. 입력한 값을 공백으로 분리해서 순서대로 각 변수에 할당합니다.

read -p "이름과 나이를 공백으로 구분해서 입력하세요: " first_name ageecho "${first_name}님은 ${age}세입니다."
$ bash 위의코드
이름과 나이를 공백으로 구분해서 입력하세요: 홍길동 30
홍길동님은 30세입니다.

변수 개수보다 입력값이 많으면, 마지막 변수에 나머지가 모두 들어갑니다.

실습: 인사 스크립트

배운 내용을 종합해서 간단한 인사 스크립트를 만들어봅니다.

#!/bin/bash# 새 파일: scripts/greeting.sh# 사용자 정보 입력read -p "이름을 입력하세요: " user_nameread -p "나이를 입력하세요: " user_age# 기본값 설정user_name="${user_name:-익명}"user_age="${user_age:-0}"# 인사말 출력echo ""echo "==============================="echo "  안녕하세요, ${user_name}님!"echo "  나이: ${user_age}세"echo "  접속 시각: $(date '+%Y-%m-%d %H:%M')"echo "==============================="exit 0

실행 결과는 다음과 같습니다.

$ bash scripts/greeting.sh
이름을 입력하세요: 홍길동
나이를 입력하세요: 30

===============================
  안녕하세요, 홍길동님!
  나이: 30세
  접속 시각: 2026-04-24 10:30
===============================

이름을 입력하지 않고 엔터를 누르면 user_name이 비어있고 ${user_name:-익명}으로 기본값 "익명"이 사용됩니다.

실습: 비밀번호 입력 스크립트

#!/bin/bash# 새 파일: scripts/password_check.shreadonly CORRECT_PASSWORD="bash2026"read -sp "비밀번호를 입력하세요: " input_passwordecho ""    # 줄바꿈if [[ "${input_password}" == "${CORRECT_PASSWORD}" ]]; then  echo "인증 성공! 환영합니다."  exit 0else  echo "비밀번호가 틀렸습니다."  exit 1fi

실행 결과는 다음과 같습니다.

$ bash scripts/password_check.sh
비밀번호를 입력하세요: 
인증 성공! 환영합니다.

비밀번호를 입력할 때 화면에는 아무것도 표시되지 않습니다. if [[ ]] 문법은 PART 04에서 자세히 다루지만, 여기서는 두 문자열이 같은지 비교하는 용도로 이해하고 넘어갑니다.