[bash] 성공할 때까지 bash에서 명령을 실행하는 방법

스크립트가 있는데 사용자에게 정보를 요청하고 싶습니다. 사용자가이 정보를 입력 할 때까지 스크립트를 계속할 수 없습니다. 다음은 이것을 달성하기 위해 명령을 루프에 넣으려는 시도이지만 어떤 이유로 작동하지 않습니다.

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;


답변