사용자와 이름이 같은 파일에 세 개의 입력을 어떻게 저장합니까?

사용자와 이름이 같은 파일에 세 개의 입력을 어떻게 저장합니까?
#!/bin/bash                                                                     
while :                                                                         
        do                                                                      
        echo "Please enter your tittle:"                                        
        read TITTLE                                                             
        echo "Please enter your surname:"                                       
        read SURNAME                                                            
        echo "Please enter your ID No."                                         
        read ID                                                                 

        if [ "$TITTLE" = "" ] || [ "${TITTLE//[!0-9]}" != "" ];                 
        then                                                                    
        echo "Enter your valid tittle without special characters."              
        echo "Please try again."                                                
        continue                                                                  
        fi                                                                      

        if [ "$SURNAME" = "" ] || [ "${SURNAME//[!0-9]}" != "" ];               
        then                                                                    
        echo "Enter your valid surname without special characters."             
        echo "Please try again."                                                
        continue                                                                  
        fi                                                                      

        if [ "$ID" = "" ] || [ "${ID//[0-9]}" != "" ];                          
        then                                                                    
        echo "Enter your valid ID No. without special characters."              
        echo "Please try again"

        else                                                                    
        echo "Thank you" $TITTLE $SURNAME                                       
        break                                                                   
fi                                                                              
done

답변1

가정: $SURNAME사용자 이름입니다.

의 내용을 $TITTLE, $SURNAME$ID내용의 이름을 딴 파일에 쓰려면 $SURNAME다음과 같이 코드를 수정할 수 있습니다.

...
    else
    echo "Thank you $TITTLE $SURNAME, your information will be stored in \"$SURNAME.txt\""
    echo -e "$TITTLE\n$SURNAME\n$ID" > "$SURNAME.txt"
    break
...

\n-e를 사용하면 echo가 '개행'으로 인식됩니다 .

답변2

관련 질문에 대한 답변에 쓴 것처럼 "3개의 입력을 검증하는 스크립트", 스크립트의 출력은 다음을 통해 리디렉션될 수 있습니다.

$ ./script.sh >"$USER.txt"

여기서 은 $USER사용자 이름으로 대체됩니다(이 변수는 와 마찬가지로 $LOGNAME일반적으로 셸이나 시스템에 의해 사용자 이름으로 설정됩니다).

스크립트에서 읽은 성을 사용하려면 다음 줄을 변경하십시오.

echo "Thank you" $TITTLE $SURNAME          

~ 안으로

echo "Thank you $TITTLE $SURNAME" >"$SURNAME.txt"

echo이렇게 하면 사용자가 성으로 입력한 이름이 .txt파일 이름 끝에 추가되어 이름이 지정된 파일 로 결과가 리디렉션됩니다 (분명히 선택 사항임). 기존 파일을 덮어쓰는지 여부는 확인되지 않습니다.

이를 터미널에도 출력하려면 다음을 사용하여 데이터를 복제하십시오 tee.

echo "Thank you $TITTLE $SURNAME" | tee "$SURNAME.txt"

세 비트의 데이터를 모두 파일로 출력하려면 다음을 사용하십시오.

{
    printf 'ID = %s\n' "$ID"
    printf 'surname = %s\n' "$SURNAME"
    printf 'title = %s\s' "$TITTLE"
} >"$SURNAME.txt"

이와 같이 중괄호 안에 명령 세트를 그룹화하면 단일 리디렉션으로 그룹의 모든 출력을 리디렉션할 수 있습니다.

보다 "왜 printf가 echo보다 나은가요?" 변수 문자열을 인쇄할 때보 printf다 사용하는 경향이 있는 이유입니다 .echo

관련 정보