2013-10-22 45 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'表示如果字符串爲空並且while [[-z「$ NEWPASS」]]'表示運行這個while循環直到'$ NEWPASS'爲空。您的常規閱讀命令在循環內進入。如果用戶按下進入,那麼'$ NEWPASS'仍然是空白的,並再次顯示提示。 Moment用戶在while循環結束時輸入一個值,因爲'$ NEWPASS'變爲非空。運行'男子測試'瞭解更多。 – 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'成功,則測試被評估,如果字符串爲空,則循環繼續,否則循環退出。 –

相關問題