[shell script] read : 커맨드라인에서 데이터 입력 받기

HYEOB KIM·2022년 4월 25일
0

Shell

목록 보기
43/71

커맨드라인에서 데이터를 입력 받기 위해선 read 명령을 이용합니다.

기본 read 사용법

$ cat test1
#!/bin/bash
echo -n "Your name : "
read name
echo "My name is $name"

$ ./test1
Your name : hyeob
My name is hyeob

입력 라인에 문자열 출력

앞서 echo -n을 통해 입력 라인에 문자열을 함께 출력했지만,
read 자체적으로 -p 옵션을 이용하면 이 기능을 동일하게 수행할 수 있습니다.

$ cat test1
#!/bin/bash
read -p "Your name : " name
echo "My name is $name"

$ ./test1
Your name : hyeob
My name is hyeob

입력 시간 초과

-t <second>를 이용하면 해당 시간이 지났을 때 입력 시간이 초과되어 read 명령은 0이 아닌 종료 상태를 반환합니다.

아래 예시는 입력을 5초 동안 하지 않으면 종료되는 기능 구현입니다.

$ read -t 5 -p "Your name : " name
Your name : hyeob@hyeob:~/devops/Script$

$ echo $?
142

0이 아닌 종료 상태를 반환하다 보니 if문과 연계해서 예외처리를 수행할 수 있습니다.

$ cat test1
#!/bin/bash
if read -t 5 -p "Your name : " name
then
        echo "My name is $name"
else
        echo
        echo "Sorry, please insert data quickly!"
fi

$ ./test1
Your name :
Sorry, please insert data quickly!

입력 글자수 제한

-n 옵션의 파라미터로 숫자를 주게 되면 해당 글자 수 만큼 입력하면 자동으로 입력이 종료됩니다.

$ cat test1
#!/bin/bash
if read -n 1 -t 5 -p "Your name : " name
then
        echo
        echo "My name is $name"
else
        echo
        echo "Sorry, please insert data quickly!"
fi

$ ./test1
Your name : y
My name is y

스크립트에서 계속 진행하는지에 대한 여부를 묻는 예제에 대해 입력값을 1글자로 제한해봅시다.

$ cat test1
#!/bin/bash
read -n 1 -t 5 -p "Do you want to continue [Y/N]?  " answer
case $answer in
        Y | y) echo
                echo "continue...";;
        N | n) echo
                echo "stop..."
                exit;;
esac

$ ./test1
Do you want to continue [Y/N]?  y
continue...

$ ./test1
Do you want to continue [Y/N]?  n
stop...

화면에 표시하지 않기

패스워드 같은 경우 입력값을 표시하지 말아야 합니다.

$ cat test1
#!/bin/bash
read -t 60 -s -p "Enter your password : " password
if [ $password = "1234" ]
then
        echo
        echo "Hello, $USER!"
else
        echo
        echo "You can't access this program"
fi

$ ./test1
Enter your password :
Hello, hyeob!

$ ./test1
Enter your password :
You can't access this program
profile
Devops Engineer

0개의 댓글