스크립트가 있는데 사용자에게 정보를 요청하고 싶습니다. 사용자가이 정보를 입력 할 때까지 스크립트를 계속할 수 없습니다. 다음은 이것을 달성하기 위해 명령을 루프에 넣으려는 시도이지만 어떤 이유로 작동하지 않습니다.
echo "Please change password"
while passwd
do
echo "Try again"
done
while 루프의 많은 변형을 시도했습니다.
while `passwd`
while [[ "`passwd`" -gt 0 ]]
while [ `passwd` -ne 0 ]]
# ... And much more
그러나 나는 그것을 작동시키지 못하는 것 같습니다.
답변
until passwd
do
echo "Try again"
done
또는
while ! passwd
do
echo "Try again"
done
답변
$?
대신 이전 명령의 종료 상태 인 테스트를 수행해야합니다 . passwd
모든 것이 정상적으로 작동하면 0으로 종료하고 암호 변경에 실패한 경우 0이 아닌 값으로 종료됩니다 (잘못된 비밀번호, 비밀번호 불일치 등).
passwd
while [ $? -ne 0 ]; do
passwd
done
당신의 역 따옴표 버전으로, 당신은 같은 물건이 될 것 passwd 파일의 출력을 비교하고 Enter password
그리고 confirm password
등을.
답변
@Marc B의 답변을 자세히 설명하려면
$ passwd
$ while [ $? -ne 0 ]; do !!; done
명령에 맞지 않는 것과 같은 일을하는 좋은 방법입니다.
답변
무한 루프를 사용하여이를 달성 할 수 있습니다.
while true
do
read -p "Enter password" passwd
case "$passwd" in
<some good condition> ) break;;
esac
done
답변
재시도 제한을 원하는 사람이있는 경우 :
max_retry=5
counter=0
until $command
do
sleep 1
[[ counter -eq $max_retry ]] && echo "Failed!" && exit 1
echo "Trying again. Try #$counter"
((counter++))
done
답변
while [ -n $(passwd) ]; do
echo "Try again";
done;