Bash 스크립트에서 사용자 입력 읽는 방법
리눅스의 read 명령어는 명령줄에서 사용자 입력을 받아 변수에 저장하는 도구입니다. 스크립트 실행 중에 사용자와 상호작용하는 기능이 필요할 때 매우 유용하게 활용됩니다.
read 명령어 기본 문법
read [옵션] 변수명
변수 이름 앞에 $ 기호를 붙이면 저장된 값에 접근할 수 있습니다. 예를 들어 $변수명 형태로 사용합니다.
사용자 입력을 받는 Bash 스크립트 예제
먼저 .sh 확장자를 가진 스크립트 파일을 생성합니다.
touch user_input.sh
선호하는 편집기로 파일을 연 뒤 아래 내용을 작성합니다.
#!/bin/bash
echo "이름을 입력하세요:"
read name
echo "나이를 입력하세요:"
read age
echo "안녕하세요" $name, "당신은" $age "살입니다"
위 스크립트는 사용자로부터 이름과 나이를 차례로 입력받아 인사말과 함께 출력합니다.
참고: read 명령어로 값을 저장할 때는 변수의 자료형(타입)을 별도로 지정할 필요가 없습니다. 모든 입력은 기본적으로 문자열로 처리됩니다.
스크립트를 실행하려면 터미널을 열고 아래 명령어를 입력합니다.
$ sh user_input.sh
이름을 입력하세요:
DevQA
나이를 입력하세요:
12
안녕하세요 DevQA, 당신은 12 살입니다
read 명령어로 프롬프트 메시지 함께 출력하기 (-p 옵션)
echo를 따로 쓰지 않고 read 명령어만으로 안내 메시지를 바로 표시하려면 -p 옵션을 사용합니다.
$ read -p "사용자명을 입력하세요: " username
입력 내용을 화면에 숨기기 (-s 옵션)
비밀번호처럼 입력 내용이 화면에 그대로 노출되지 않아야 하는 경우에는 -s(silent) 옵션을 사용합니다. 이 옵션을 적용하면 사용자가 입력하는 문자가 터미널에 표시되지 않습니다.
$ read -sp "비밀번호를 입력하세요: " password
-p와 -s는 위 예제처럼 붙여서(-sp) 한 번에 사용할 수도 있습니다.
옵션을 조합한 전체 스크립트
앞서 소개한 두 옵션을 활용해 사용자명과 비밀번호를 입력받는 Bash 스크립트는 다음과 같습니다.
#!/bin/bash
read -p "사용자명을 입력하세요: " username
read -sp "비밀번호를 입력하세요: " password
echo -e "\n사용자명: $username / 비밀번호: $password"
실행 결과:
$ sh user_input.sh
사용자명을 입력하세요: devqa
비밀번호를 입력하세요:
사용자명: devqa / 비밀번호: secret
함께 알아두면 좋은 read 옵션
- -t 초: 지정한 시간(초) 안에 입력이 없으면 대기를 종료합니다. 예:
read -t 5 name - -n 개수: 지정한 개수의 문자만큼만 입력받습니다. 예:
read -n 1 key(키 하나만 입력) - -a 배열명: 공백으로 구분된 여러 값을 배열로 한 번에 저장합니다.