#!/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
...
그 중 -e를 사용하면 echo를 \n
"개행 문자"로 인식할 수 있습니다.
답변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