2017-04-25 48 views
2

所以,我試圖製作一個密碼腳本,並且它在很大程度上起作用。但是,循環會一直持續,而不是在每個「不正確的密碼」之後停止,因此用戶可以輸入密碼。然而,它不斷髮送垃圾郵件不正確的密碼,並沒有機會輸入任何東西。 我也試過把read password放在直線下面,但是這也不起作用。終端密碼

#!/bin/bash 
# Author: Dom (GlitchyShadowZ) 
# No name lol 
# Password Protected Terminal 

echo "Please enter password to continue" 
str="owo" 
read password 

until [ $password = $str ] 
do 
    # Password Verification 
    if [ $password = $str ]; 
    then 
     echo "Password correct. Logging in" 
    else 
     echo "Password Incorrect. Try again." 
    fi 
done 
+4

您需要在循環內讀取密碼,否則它將永遠不會改變。 – msitt

回答

3

您必須在每次比較之前閱讀密碼。此外,您正在檢查$password = $str條件兩次 - 這不是必需的。您可以通過完全去除循環if和劇本一樣,結束移動Password correct. Logging in只檢查一次:

#!/bin/bash 

# Author: Dom (GlitchyShadowZ) 

# No name lol 

# Password Protected Terminal 

echo "Please enter password to continue" 
str="owo" 
read password 

until [ "$password" = "$str" ] 
do 
    echo "Password Incorrect. Try again." 
    read password 
done 

echo "Password correct. Logging in" 

break內環路一起使用while true當輸入正確的密碼:

#!/bin/bash 

# Author: Dom (GlitchyShadowZ) 

# No name lol 

# Password Protected Terminal 


str="owo" 
password="" 

echo "Please enter password to continue" 

while true 
do 
    read password 
    # Password Verification 
    if [ "$password" = "$str" ]; 
    then 
    echo "Password correct. Logging in" 
    break 
    else 
    echo "Password Incorrect. Try again." 
    fi 
done 

在這兩種情況下,要確保把周圍的變量""因爲目前當你的腳本運行,並沒有什麼類型的,輸入立即按你這樣的:

line 13: [: =: unary operator expected