사용자 인터페이스_03 키보드에서 사용자 키 입력을 획득해서 변수값으로 이용하기

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

명령어: read
키워드: 표준 입력, 키보드
사용처: 키보드에서 입력받은 값을 써서 대화형 처리를 하고 싶을 때


실행예제

$ ./read.sh
Enter your ID: guest
Now your ID is geust  <----------- 입력된 값을 표시

스크립트

#!/bin/sh

echo -n "Enter your ID: "
read id  #--------------------- 1

echo "Now your ID is $id"  #--- 2

   

해설

이 스크립트는 사용자가 키보드로 ID를 입력하면 셸 스크립트 내부에서 그 값을 변수로 이용하여 ID를 표시합니다.

셸 스크립트가 키보드에서 입력된 값을 얻으려면 read 명령어를 사용합니다. read 명령어는 1처럼 값을 넣고 싶은 변수를 인수로 받습니다. 즉 이 예제에서는 셸 변수 id에 사용자가 입력한 값이 대입됩니다. 이렇게 셸 스크립트에서 사용자 입력을 얻을 수 있습니다.

2에서 입력된 값을 써서 메시지를 표시합니다. 변수 id에는 사용자가 입력한 ID가 들어 있습니다. 이후, 입력된 ID에 따라 처리를 작성하면 됩니다.

한편, read 명령어로 여러 입력값을 받고 싶을 때는 다음처럼 read 명령어 뒤에 복수 개의 변수를 스페이스로 구분지어 나열합니다.

echo -n "Enter your ID NAME NUMBER : "
read id name number

사용자가 다음처럼 입력하면 변수 id에는 guest, 변수 name에는 Seo, 변수 number에는 341이 들어갑니다.

Enter your ID NAME NUMBER : guest Seo 341

사용자 입장에서 여러 값을 한 줄로 입력하는 방식은 불편합니다. 실제로는 하나씩 입력하는 편이 편리합니다.

  • 파일1한 줄로 한꺼번에 입력하는 것보다 줄마다 따로 입력하는 게 더 편리하다

    echo -n "Enter your ID : "
    read id
    echo -n "Enter your NAME : "
    read name
    echo -n "Enter your NUMBER : "
    read number
    
    echo "Now your ID is $id."
    echo "NAME : $name, NUMBER : $number"
    

   

주의사항

  • read 명령어를 실행하면 사용자 입력을 기다리므로 스크립트 실행이 일시정지됩니다. 따라서 다음처럼 단순히 스크립트를 일시정지하고 싶을 때에도 read 명령어를 이용합니다. 이때 입력값은 필요없으므로 대입하는 셸 변수는 더미(dummy)입니다.

    #!/bin/sh
    
    echo "Input any key to continue..."
    read dummy
    echo "Script start."