파일에서 이름을 찾을 수 없을 때까지 사용자 이름을 묻는 메시지 표시

파일에서 이름을 찾을 수 없을 때까지 사용자 이름을 묻는 메시지 표시

변수를 파일로 가져오려고 하는데 어떤 이유로 그렇게 할 수 없습니다. 코드는 다음과 같습니다.

 while [[ $user ]]
                    do
                            read user
                            if grep -q "^${user}" date.txt; then
                            echo This user already exists 
                            read user
                    else
                            break
                            fi
                    done

사용자를 찾을 수 없으면 while 루프를 중단해야 합니다. 하지만 나는 이 일을 할 수 없고 왜 그런지 모르겠습니다.

답변1

일종의 유효성 검사 입력 루프를 작성하고 있는 것 같습니다.

이는 일반적으로 무한 루프에서 수행되며 유효한 입력이 입력되자마자 종료됩니다.

while true; do
    read data

    if data-is-valid; then
        break
    fi
done

귀하의 경우:

while true; do
    read -r -p 'Enter username: ' username

    if ! grep -q -e "^$username\>" date.txt; then
        break
    fi

    echo 'User already exists, try again' >&2
done

\>명령의 패턴은 단어가 문자열 바로 다음에 끝나도록 요구하여 grep사용자가 파일의 사용자와 일치하지 않도록 합니다 theo.theodoredate.txt

관련 정보