#!/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