2013-10-22 2 views
10

그래서 누군가가 사용자가 암호 입력을 입력했는지 테스트하는 데 조건 (들)을 사용하는 방법을 보여주었습니다. 나는 한 걸음 더 나아가 그들의 예를 들고 싶다. 적어도 루프라고 생각한다.사용자 입력이 무언가가 될 때까지

여기에 자신의 예는 다음과 같습니다

read -s -p "Enter new password: " NEWPASS 

if test "$NEWPASS" = ""; then 
    echo "Password CAN NOT be blank re-run sshd_config" 
    exit 1; 
fi 

대신 좀가 될 때까지 입력을 요구 유지하려는 스크립트를 종료의.

사용자가 새 암호를 입력하고 변수 값을 채울 수있는 기회 부여 (지금 가기 예제를 사용하여) 을 :

는이 같은 성명을 만들고 싶어하지만, 내가 잘못을하고 있었다. 값이 무한 값을 기입하도록 사용자에게 요청하는 동안 널

read -s -p "Enter new password:" NEWPASS 
echo "" 

다음 부분은,이 값을 포함하는지 변수를 체크한다.

while [[ -z "$NEWPASS" ]]; do 
echo "" 
echo "Password CAN NOT be blank" 
echo "" 
read -s -p "Enter new password:" NEWPASS; 
echo "" 
done 

이 줄은 다른 파일에서 사용하는 변수 집합을 포함하는 파일을 검색합니다. 그런 다음 PASS를 포함하는 행 = 위해 파일을 검색합니다. (*. * 무엇을 의미) 다음 PASS = $ newpass로는 ($ newpass로 변수 인)

sed -i -e"s/^PASS=.*/PASS=$NEWPASS/" /etc/sshd.conf 

모든 도움을 주셔서 감사 기록, 내가에 갈거야 이것을 사용하고 그것으로부터 배웁니다.

답변

19

이 while 루프 작동합니다 :

while [[ -z "$NEWPASS" ]] 
do 
    read -s -p "Enter new password: " NEWPASS 
done 
+1

당신은 당신의 대답을 분해하고 설명 할 수 있을까요? 나는 거의 jist를 얻는다, 나는 다만 그것을 완전히 이해하고 싶다. – Geofferey

+3

예. '-z string'은 string이 비어있는 것을 의미하고 while [[-z "$ NEWPASS"]]는'$ NEWPASS'가 비워 질 때까지 while 루프를 실행하는 것을 의미합니다. 정기적 인 읽기 명령은 while 루프 내에 있습니다. 사용자가 'Enter'키를 누르면 '$ NEWPASS'는 여전히 비어 있고 프롬프트가 다시 나타납니다. '$ NEWPASS'가 비어 있지 않기 때문에 모멘트 사용자는 루프를 종료하는 동안 값을 입력합니다. 더 자세한 것은'man test'를 실행하십시오. – anubhava

3
while read -s -p 'Enter new password: ' NEWPASS && [[ -z "$NEWPASS" ]] ; do 
echo "No-no, please, no blank passwords!" 
done 
+0

답변을 해독하고 설명해 주시겠습니까? – Geofferey

+0

물론,'read'가 성공하면 test가 평가됩니다. 문자열이 비어 있으면 루프가 계속되고, 그렇지 않으면 루프가 종료됩니다. –

관련 문제