커맨드라인에서 데이터를 입력 받기 위해선
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