2013-09-30 112 views
0

我的代碼未能驗證if語句中給出的一些邏輯標準。我是bash的新手,所以任何幫助都會很棒。我的代碼運行,但在我的邏輯失敗。另外,我想了解更多先進的編寫bash腳本的方法。任何建議將不勝感激。Bash腳本檢查密碼標準與密碼加密

function validatePassword() 
     {   
       local stat=1 #assigns 1 to (stat) 
       local pass=$1 
       LEN=${#pass} #counts each character in the password length 
       echo $LEN  #Prints string length 
         #checks for nums  chesks for lowercase checks for uppercase   checks if pass is greater than 8 
       if [[ $pass =~ [0-9] ]] && [[ $pass =~ [a-z] ]] && [[ $pass =~ [A-Z] ]] && [[ "$LEN" -ge 8 ]]; then 
         stat=$?   #return 1 for false 
       fi 
       return $stat 
     } 
function encryptPassword() 
     { 
       dual=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 
       phrase=$encryptedPassword 
       rotat=13 
       newphrase=$(echo $phrase | tr "${dual:0:26}" "${dual:${rotat}:26}") 
       echo "Your encrypted password is ${newphrase}" 
     } 

#Promts the user for input storing into variable PASSWORD 
read -p "Enter your password:" -e PASSWORD 

passwordToCheck=$PASSWORD 
encryptedPassword=$PASSWORD 

validatePassword $passwordToCheck  #Calls function passsing value of (PASSWORD) 
encryptPassword $encryptedPassword  #Calls function passing value of (PASSWORD) 

if [[ $? -ne 0 ]]; then   #(-ne) not equal command 
     echo "Invalid password" 
else 
     echo "Password is valid" 
fi 



#! /bin/bash 

讀-p 「輸入一個數字:」 #Prompt &閱讀串-e輸入。 echo「您的輸入是$輸入」 echo#passwd> = 8 #check uppder #check lower #check for num if echo「$ input」| egrep「^。{8,255}」| egrep「[A-Z]」| egrep「[a-z]」| egrep「[0-9]」;然後 回聲「密碼有效期」 其他 回聲「密碼無效」 網絡

回聲「$輸入」 | TR 'A-ZA-z0-5' 'N-ZA - 錳 - ZA-m6-9-5'

出口0

+1

問題是什麼? – devnull

+0

您是不是要在調用驗證函數之後放置返回值檢查(即,* validatePassword和encryptPassword之間的*)? –

+0

我能夠在這裏工作是我的更新。 #!/bin/bash read -p「輸入數字:」-e輸入#Prompt&讀取字符串。 回聲 「你輸入$輸入」 呼應\t \t \t#passwd文件> = 8 \t#檢查uppder \t#檢查下\t#檢查爲NUM 如果回聲 「$輸入」 | egrep「^。{8,255}」| egrep「[A-Z]」| egrep「[a-z]」| egrep「[0-9]」;然後 \t回聲「密碼有效期」 其他 \t回聲「密碼無效」 網絡 回聲「$輸入」 | tr'A-Za-z0-5'N-ZA-Mn-za-m6-9-5' exit 0 –

回答

1

唯一指定的標準以確定密碼是否是有效或不存在於validatePassword中。在所提到的功能之後,您不檢查返回代碼。您改爲在encryptPassword之後檢查它。

由於encryptPassword以退出代碼0返回,所以前一個函數中的return被忽略。

你可能想改變你的代碼的最後幾行:

validatePassword $passwordToCheck  #Calls function passsing value of (PASSWORD) 

if [[ $? -ne 0 ]]; then   #(-ne) not equal command 
     echo "Invalid password" 
else 
     echo "Password is valid" 
     encryptPassword $encryptedPassword  #Calls function passing value of (PASSWORD) 
fi