소개
이 랩에서는 Linux 셸 스크립트에서 입력 읽기를 소개합니다. 입력 읽기는 사용자 입력을 처리할 수 있는 대화형 셸 스크립트를 만드는 데 필수적인 기술입니다. read 명령을 사용하는 방법을 배우면 사용자가 입력한 데이터를 수집하고 처리하여 스크립트를 더욱 다재다능하고 사용자 친화적으로 만들 수 있습니다.
이 랩에서는 사용자 입력을 읽고, 스크립트 내에서 해당 입력을 처리하며, 다양한 사용자 입력에 동적으로 응답할 수 있는 대화형 셸 스크립트를 만드는 방법을 배우게 됩니다. 이러한 기술은 Linux 환경에서 효과적인 명령줄 도구 및 스크립트를 작성하는 데 필수적입니다.
기본 입력 읽기
read 명령은 표준 입력 (일반적으로 키보드) 에서 한 줄의 입력을 읽어 변수에 할당하는 내장 셸 명령입니다. 이를 통해 스크립트는 사용자 입력을 수신하고 처리할 수 있습니다.
이 단계에서는 사용자 입력을 읽어 사용자에게 다시 표시하는 간단한 스크립트를 만들 것입니다.
먼저, 프로젝트 디렉토리에 있는지 확인합니다.
cd /home/labex/projectinput_reader.sh라는 새 스크립트 파일을 만듭니다.touch input_reader.sh스크립트를 실행 가능하게 만듭니다.
chmod +x input_reader.shnano 텍스트 편집기를 사용하여 스크립트 파일을 엽니다.
nano input_reader.sh다음 코드를 스크립트에 추가합니다.
#!/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이라는 변수에 저장합니다.- 사용자가 입력한 이름을 포함하는 인사를 표시합니다.
- bash 를 사용하여 스크립트를 실행하도록 지정하는 shebang (
Ctrl+O를 눌러 파일을 저장한 다음Enter를 눌러 파일 이름을 확인하고,Ctrl+X를 눌러 nano 를 종료합니다.스크립트를 실행하여 테스트합니다.
./input_reader.sh다음과 유사한 출력을 볼 수 있습니다.
Please enter your name: John Hello, John! Welcome to Linux input reading.실제 출력은 "John" 대신 입력한 이름을 표시합니다.
read 명령은 사용자 입력을 기다리고 하나 이상의 변수에 저장합니다. 이 예제에서는 입력이 name이라는 단일 변수에 저장되었습니다. 나중에 단일 read 명령으로 여러 입력을 캡처하는 방법을 배우게 됩니다.
루프와 함께 Read 사용
이 단계에서는 특정 종료 조건이 충족될 때까지 루프를 사용하여 입력을 지속적으로 읽도록 스크립트를 개선합니다. 이 패턴은 사용자로부터 여러 정보를 수집해야 하는 대화형 스크립트에서 일반적으로 사용됩니다.
편집을 위해 스크립트를 엽니다.
nano input_reader.sh기존 내용을 다음 코드로 바꿉니다.
#!/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"인지 확인하고, 그렇다면 루프를 종료합니다.
- 그렇지 않으면 입력을 사용자에게 다시 에코합니다.
- 마지막으로, 루프를 종료한 후 감사 메시지를 표시합니다.
Ctrl+O를 눌러 파일을 저장한 다음Enter를 눌러 파일 이름을 확인하고,Ctrl+X를 눌러 nano 를 종료합니다.개선된 스크립트를 실행합니다.
./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 키를 누를 수 있는 옵션을 제공하려는 경우에 유용합니다.
편집을 위해 스크립트를 엽니다.
nano input_reader.sh기존 내용을 다음 코드로 바꿉니다.
#!/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 초).
Ctrl+O를 눌러 파일을 저장한 다음Enter를 눌러 파일 이름을 확인하고,Ctrl+X를 눌러 nano 를 종료합니다.스크립트를 실행하여 테스트합니다.
./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} 구문은 변수가 설정되지 않거나 비어 있을 때 기본값을 대체하는 강력한 셸 기능으로, 스크립트에서 기본 옵션을 제공하는 데 적합합니다.
보안 입력 및 여러 변수 읽기
이 마지막 단계에서는 두 가지 더 고급 기술을 배웁니다.
화면에 문자를 표시하지 않고 보안 입력 (예: 비밀번호) 을 읽는 방법
단일
read명령으로 여러 변수를 읽는 방법편집을 위해 스크립트를 엽니다.
nano input_reader.sh기존 내용을 다음 코드로 바꿉니다.
#!/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플래그를 사용하여 사용자 지정 구분 기호 (기본 개행 문자 대신) 를 지정하는 방법을 보여줍니다.
Ctrl+O를 눌러 파일을 저장한 다음Enter를 눌러 파일 이름을 확인하고,Ctrl+X를 눌러 nano 를 종료합니다.스크립트를 실행하여 테스트합니다.
./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 스크립트에서 사용자 입력을 읽고 처리하기 위한 주요 기술을 배웠습니다.
기본 입력 읽기:
read명령을 사용하여 사용자 입력을 변수로 캡처합니다.루프 기반 입력: 특정 조건이 충족될 때까지 입력을 지속적으로 읽기 위해 루프를 구현합니다.
기본값 및 프롬프트: 입력에 대한 기본값을 설정하고 인라인 프롬프트를 사용하여 더 깔끔한 스크립트를 만듭니다.
고급 기술: 화면에 표시하지 않고 보안 입력을 읽고, 단일 명령으로 여러 변수를 캡처하고, 사용자 지정 구분 기호를 사용합니다.
이러한 입력 읽기 기술은 사용자 입력에 적응하고, 적절한 기본값을 제공하며, 다양한 유형의 데이터를 처리할 수 있는 대화형 셸 스크립트를 만드는 데 필수적입니다. 이제 이러한 기술을 적용하여 더 반응성이 뛰어나고 사용자 친화적인 명령줄 도구 및 스크립트를 만들 수 있습니다.
Linux 기술을 계속 개발하면서, 이러한 입력 읽기 방법을 조건문, 함수 및 파일 작업과 같은 다른 bash 기능과 결합하여 자동화 및 시스템 관리를 위한 더 복잡하고 강력한 도구를 만드는 것을 고려해 보십시오.



