2016-11-05 45 views
-3

循環被啓動,即使if語句確實還有這是沒有意義的,但我很新來砸所以沒有很多的事情是有意義的我用戶名和通行證登錄環慶典

first=0 
echo enter your username 
read user 
log1=$(grep -q $user username_pass.txt) 

echo enter your password 
read pass 
log2=$(grep -q $pass username_pass.txt) 

if [ $log1=0 ] && [ $log2=0 ]; 
then 
    echo Welcome 
    first=1 
fi 

while [ $log1=1 ] || [ $log2=1 ]; 
do 
    echo wrong user name or password 
    echo enter your username 
    read user 
    echo enter your password 
    read pass 
done 

if [ $log1=0 ] && [ $log2=0 ] && [ first=0 ]; 
then 
    echo Welcome 
fi 
+0

哪個'if'語句?你的問題不清楚。 –

+0

這是一個重複的https://stackoverflow.com/questions/40442693/username-password-program-in-bash –

+0

它不是一個重複其不同的問題在代碼的不同部分 –

回答

0

[ … ]在shell中不是特別特殊的語法。您將參數$log1=0]傳遞給名爲[的命令,該命令從其參數中移除],並將其餘參數傳遞給test。假設$log1包含「用戶名」,結果是:

test 'username=0' 

test得到一個參數,它會檢查,如果這樣的說法是一個非空字符串。 $log1=0永遠不會是一個空字符串。

你真正要找的是通過運營商和操作數作爲獨立參數,就像這樣:

if [ "$log1" = 0 ] && [ "$log2" = 0 ]; then 

注意引號,它防止$log1被擴展到多個參數。

您也大概就是這個意思,如果你比較這對一個數字,它會運行命令後$?grep,而不是輸出得到一個退出代碼:

grep -q "$user" username_pass.txt 
log1=$? 

你也可以這樣拆分出於易用性的功能。

test_credentials() { 
    grep -q "$1" username_pass.txt || return 1 
    grep -q "$2" username_pass.txt || return 1 
} 

if test_credentials "$user" "$pass"; then 
    … 

您可能還想重新考慮如何檢查憑證。同一個文件兩次掠過可能會有很多問題,但是其中一個問題肯定是有,您可以通過使用用戶名作爲密碼登錄。

+0

我有一個文件2列一個是用戶名,另一個是密碼,它們是由用戶在代碼的不同部分輸入的,我希望它能夠檢查他們輸入的用戶名和密碼是否與文件中的任何用戶名和密碼相匹配名爲username_pass.txt –

+0

@AdrianFall:太棒了!和? – Ryan

+0

有什麼方法可以使用awk來查找用戶名在哪裏,並檢查第二個輸入是否與該行第二列中的密碼匹配? –