리눅스 입력 읽기

LinuxBeginner
지금 연습하기

소개

이 랩에서는 Linux 셸 스크립트에서 입력 읽기를 소개합니다. 입력 읽기는 사용자 입력을 처리할 수 있는 대화형 셸 스크립트를 만드는 데 필수적인 기술입니다. read 명령을 사용하는 방법을 배우면 사용자가 입력한 데이터를 수집하고 처리하여 스크립트를 더욱 다재다능하고 사용자 친화적으로 만들 수 있습니다.

이 랩에서는 사용자 입력을 읽고, 스크립트 내에서 해당 입력을 처리하며, 다양한 사용자 입력에 동적으로 응답할 수 있는 대화형 셸 스크립트를 만드는 방법을 배우게 됩니다. 이러한 기술은 Linux 환경에서 효과적인 명령줄 도구 및 스크립트를 작성하는 데 필수적입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 96%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

기본 입력 읽기

read 명령은 표준 입력 (일반적으로 키보드) 에서 한 줄의 입력을 읽어 변수에 할당하는 내장 셸 명령입니다. 이를 통해 스크립트는 사용자 입력을 수신하고 처리할 수 있습니다.

이 단계에서는 사용자 입력을 읽어 사용자에게 다시 표시하는 간단한 스크립트를 만들 것입니다.

  1. 먼저, 프로젝트 디렉토리에 있는지 확인합니다.

    cd /home/labex/project
  2. input_reader.sh라는 새 스크립트 파일을 만듭니다.

    touch input_reader.sh
  3. 스크립트를 실행 가능하게 만듭니다.

    chmod +x input_reader.sh
  4. nano 텍스트 편집기를 사용하여 스크립트 파일을 엽니다.

    nano input_reader.sh
  5. 다음 코드를 스크립트에 추가합니다.

    #!/bin/bash
    
    ## A simple script to demonstrate basic input reading
    echo "Please enter your name:"
    read name
    echo "Hello, $name! Welcome to Linux input reading."

    이 스크립트는 다음과 같습니다.

    • bash 를 사용하여 스크립트를 실행하도록 지정하는 shebang (#!/bin/bash) 으로 시작합니다.
    • 사용자 이름을 묻는 프롬프트를 표시합니다.
    • read 명령을 사용하여 사용자가 입력한 내용을 캡처하여 name이라는 변수에 저장합니다.
    • 사용자가 입력한 이름을 포함하는 인사를 표시합니다.
  6. Ctrl+O를 눌러 파일을 저장한 다음 Enter를 눌러 파일 이름을 확인하고, Ctrl+X를 눌러 nano 를 종료합니다.

  7. 스크립트를 실행하여 테스트합니다.

    ./input_reader.sh

    다음과 유사한 출력을 볼 수 있습니다.

    Please enter your name:
    John
    Hello, John! Welcome to Linux input reading.

    실제 출력은 "John" 대신 입력한 이름을 표시합니다.

read 명령은 사용자 입력을 기다리고 하나 이상의 변수에 저장합니다. 이 예제에서는 입력이 name이라는 단일 변수에 저장되었습니다. 나중에 단일 read 명령으로 여러 입력을 캡처하는 방법을 배우게 됩니다.

루프와 함께 Read 사용

이 단계에서는 특정 종료 조건이 충족될 때까지 루프를 사용하여 입력을 지속적으로 읽도록 스크립트를 개선합니다. 이 패턴은 사용자로부터 여러 정보를 수집해야 하는 대화형 스크립트에서 일반적으로 사용됩니다.

  1. 편집을 위해 스크립트를 엽니다.

    nano input_reader.sh
  2. 기존 내용을 다음 코드로 바꿉니다.

    #!/bin/bash
    
    ## Enhanced script with a loop for multiple inputs
    echo "Enter multiple inputs (type 'exit' to quit):"
    
    while true; do
      ## Prompt for input
      echo -n "> "
      read input
    
      ## Check if user wants to exit
      if [[ "$input" == "exit" ]]; then
        echo "Exiting the input reader."
        break
      fi
    
      ## Process the input
      echo "You entered: $input"
    done
    
    echo "Thank you for using the input reader!"

    이 스크립트는 다음과 같습니다.

    • while true 루프를 사용하여 입력을 계속 허용하는 무한 루프를 만듭니다.
    • 개행 문자를 방지하는 echo -n을 사용하여 각 입력 전에 프롬프트 (>) 를 표시합니다.
    • 사용자 입력을 input 변수로 읽습니다.
    • 입력이 "exit"인지 확인하고, 그렇다면 루프를 종료합니다.
    • 그렇지 않으면 입력을 사용자에게 다시 에코합니다.
    • 마지막으로, 루프를 종료한 후 감사 메시지를 표시합니다.
  3. Ctrl+O를 눌러 파일을 저장한 다음 Enter를 눌러 파일 이름을 확인하고, Ctrl+X를 눌러 nano 를 종료합니다.

  4. 개선된 스크립트를 실행합니다.

    ./input_reader.sh

    다음과 유사한 출력을 볼 수 있습니다.

    Enter multiple inputs (type 'exit' to quit):
    > hello
    You entered: hello
    > world
    You entered: world
    > exit
    Exiting the input reader.
    Thank you for using the input reader!

이 루프 구조는 간단한 명령줄 인터페이스 또는 데이터 입력 도구를 구축하는 경우와 같이 여러 입력을 순차적으로 처리해야 할 때 특히 유용합니다. break 문은 사용자가 "exit"를 입력하면 루프를 종료하는 데 사용되지만, 필요한 모든 기준에 따라 종료하도록 조건을 수정할 수 있습니다.

프롬프트 및 기본값으로 읽기

이 단계에서는 입력에 대한 기본값을 제공하고 -p 옵션을 사용하여 더 깔끔한 프롬프트를 만드는 방법을 배웁니다. 이는 사용자에게 제안된 값을 수락하기 위해 단순히 Enter 키를 누를 수 있는 옵션을 제공하려는 경우에 유용합니다.

  1. 편집을 위해 스크립트를 엽니다.

    nano input_reader.sh
  2. 기존 내용을 다음 코드로 바꿉니다.

    #!/bin/bash
    
    ## Script demonstrating read with default values
    
    ## Using -p flag for prompt and providing default with || operator
    read -p "Enter your country (default: USA): " country
    country=${country:-USA}
    echo "Country set to: $country"
    
    ## Another example with a default value
    read -p "Enter your preferred programming language (default: Bash): " language
    language=${language:-Bash}
    echo "Programming language set to: $language"
    
    ## Combining with a timeout using -t option
    echo "Quick response needed:"
    read -t 5 -p "What is your favorite color? (You have 5 seconds, default: Blue): " color
    color=${color:-Blue}
    echo "Favorite color set to: $color"

    이 스크립트는 다음과 같습니다.

    • -p 플래그를 사용하여 동일한 read 명령 내에 프롬프트를 표시하여 코드를 더 간결하게 만듭니다.
    • 사용자 입력이 비어 있는 경우 ${variable:-default} 구문을 적용하여 기본값을 설정합니다.
    • -t 옵션을 사용하여 입력에 대한 시간 초과를 설정합니다 (이 예에서는 5 초).
  3. Ctrl+O를 눌러 파일을 저장한 다음 Enter를 눌러 파일 이름을 확인하고, Ctrl+X를 눌러 nano 를 종료합니다.

  4. 스크립트를 실행하여 테스트합니다.

    ./input_reader.sh

    다음 시나리오를 시도해 보세요.

    • 프롬프트가 표시되면 국가 이름을 입력한 다음 Enter 키를 누릅니다.
    • 아무것도 입력하지 않고 Enter 키만 눌러 기본값을 수락합니다.
    • 시간 초과 예제의 경우, 5 초 이상 기다려서 어떤 일이 발생하는지 확인합니다.

    기본값을 수락할 때의 예시 출력:

    Enter your country (default: USA):
    Country set to: USA
    Enter your preferred programming language (default: Bash):
    Programming language set to: Bash
    Quick response needed:
    What is your favorite color? (You have 5 seconds, default: Blue):
    Favorite color set to: Blue

read-p 옵션을 사용하면 동일한 명령에서 프롬프트를 제공하여 스크립트를 더 깔끔하고 읽기 쉽게 만들 수 있습니다. ${variable:-default} 구문은 변수가 설정되지 않거나 비어 있을 때 기본값을 대체하는 강력한 셸 기능으로, 스크립트에서 기본 옵션을 제공하는 데 적합합니다.

보안 입력 및 여러 변수 읽기

이 마지막 단계에서는 두 가지 더 고급 기술을 배웁니다.

  1. 화면에 문자를 표시하지 않고 보안 입력 (예: 비밀번호) 을 읽는 방법

  2. 단일 read 명령으로 여러 변수를 읽는 방법

  3. 편집을 위해 스크립트를 엽니다.

    nano input_reader.sh
  4. 기존 내용을 다음 코드로 바꿉니다.

    #!/bin/bash
    
    ## Script demonstrating secure input and multiple variable reading
    
    ## Secure input reading with -s flag (no echo)
    echo "Secure Input Example:"
    read -p "Username: " username
    read -s -p "Password: " password
    echo ## Add a newline after password input
    echo "Username entered: $username"
    echo "Password length: ${#password} characters"
    
    ## Reading multiple variables at once
    echo -e "\nMultiple Variable Example:"
    read -p "Enter first name, last name, and age (separated by spaces): " first_name last_name age
    
    echo "First name: $first_name"
    echo "Last name: $last_name"
    echo "Age: $age"
    
    ## Reading with a custom delimiter
    echo -e "\nCustom Delimiter Example:"
    read -p "Enter comma-separated values: " -d "," value1
    echo ## Add a newline
    echo "First value before comma: $value1"
    
    echo -e "\nThank you for completing this lab on Linux input reading!"

    이 스크립트는 다음과 같습니다.

    • read와 함께 -s 플래그를 사용하여 입력을 숨깁니다 (비밀번호 또는 기타 민감한 정보에 유용).
    • read 명령에 여러 변수 이름을 제공하여 단일 입력 줄에서 여러 변수를 읽는 방법을 보여줍니다.
    • -d 플래그를 사용하여 사용자 지정 구분 기호 (기본 개행 문자 대신) 를 지정하는 방법을 보여줍니다.
  5. Ctrl+O를 눌러 파일을 저장한 다음 Enter를 눌러 파일 이름을 확인하고, Ctrl+X를 눌러 nano 를 종료합니다.

  6. 스크립트를 실행하여 테스트합니다.

    ./input_reader.sh

    예시 출력 (입력은 다를 것입니다):

    Secure Input Example:
    Username: john_doe
    Password:
    Username entered: john_doe
    Password length: 8 characters
    
    Multiple Variable Example:
    Enter first name, last name, and age (separated by spaces): John Doe 30
    First name: John
    Last name: Doe
    Age: 30
    
    Custom Delimiter Example:
    Enter comma-separated values: test,
    First value before comma: test
    
    Thank you for completing this lab on Linux input reading!

보안은 비밀번호와 같은 민감한 정보를 처리할 때 중요합니다. -s 플래그는 입력된 문자가 화면에 표시되지 않도록 합니다. 비밀번호 예제에서 스크립트는 확인을 위해 실제 비밀번호가 아닌 비밀번호의 길이만 표시합니다.

여러 변수를 한 번에 읽으면 스크립트를 더 효율적이고 사용자 친화적으로 만들 수 있습니다. read 명령에 여러 변수 이름이 제공되면 입력은 IFS(Internal Field Separator, 내부 필드 구분 기호) 환경 변수를 기반으로 분할되며, 기본값은 공백 (공백, 탭 및 개행) 입니다.

-d 플래그를 사용하면 입력의 끝을 알리는 구분 기호를 변경할 수 있습니다. 기본적으로 read는 개행 문자 (Enter 키를 누를 때) 에서 중지되지만, 예제에서 쉼표와 같이 모든 문자로 변경할 수 있습니다.

요약

이 랩에서는 Linux bash 스크립트에서 사용자 입력을 읽고 처리하기 위한 주요 기술을 배웠습니다.

  1. 기본 입력 읽기: read 명령을 사용하여 사용자 입력을 변수로 캡처합니다.

  2. 루프 기반 입력: 특정 조건이 충족될 때까지 입력을 지속적으로 읽기 위해 루프를 구현합니다.

  3. 기본값 및 프롬프트: 입력에 대한 기본값을 설정하고 인라인 프롬프트를 사용하여 더 깔끔한 스크립트를 만듭니다.

  4. 고급 기술: 화면에 표시하지 않고 보안 입력을 읽고, 단일 명령으로 여러 변수를 캡처하고, 사용자 지정 구분 기호를 사용합니다.

이러한 입력 읽기 기술은 사용자 입력에 적응하고, 적절한 기본값을 제공하며, 다양한 유형의 데이터를 처리할 수 있는 대화형 셸 스크립트를 만드는 데 필수적입니다. 이제 이러한 기술을 적용하여 더 반응성이 뛰어나고 사용자 친화적인 명령줄 도구 및 스크립트를 만들 수 있습니다.

Linux 기술을 계속 개발하면서, 이러한 입력 읽기 방법을 조건문, 함수 및 파일 작업과 같은 다른 bash 기능과 결합하여 자동화 및 시스템 관리를 위한 더 복잡하고 강력한 도구를 만드는 것을 고려해 보십시오.