2016-04-24 11 views
1

ユーザー名とパスワードの入力を求めるスクリプトがあります。私は、入力をpasswords.txtファイルに保存されているユーザー名とパスワード変数と比較したいと思います。ソースを使ってみましたが、変数にアクセスできません。あなたは、私は別の2つの変数を比較する方法を見つけ出す助けてくださいすることができた場合別のbashスクリプトから変数を検証する

passwords.txt

#!/bin/bash 
username="username" 
password="password" 

script.bash

#!/bin/bash 
echo "Enter username" 
read -r user 
echo "Enter password" 
read -r pass 
source passwords.txt 

if("$user" == "$username" && "$pass" == "$password") then 
     echo "You have successfully logged in" 
else 
     echo "You entered the wrong credentials" 
fi 

:ここでは以下の私のファイルの私の部分であり、ファイル。

+2

'if'文の構文が正しくありません。これは実際のコードですか? – cdarke

答えて

5

問題はソースではなく、ifステートメントの構文です。

つまり、プレーンテキストのパスワードをファイルに保存し、ユーザーに表示されたパスワードを入力させることは、セキュリティ上の理由から回避することです。道のうちそれと

は、ここでは、条件付きの適切な形式を示しバッシュのコードは次のとおりです。

echo "Enter username" 
read -r user 
echo "Enter password" 
read -r pass 
source passwords.txt 

if [[ "$user" == "$username" && "$pass" == "$password" ]]; then 
     echo "You have successfully logged in" 
else 
     echo "You entered the wrong credentials" 
fi 

一般的に、あなたのシェルコードの構文の問題を発見するshellcheck.netを使用することを検討してください。あなたの特定のケースで

、あなたがコメントで指摘するように、shellcheck.netしかし、助けなかったであろう:ifに渡す条件として

(...)を実行するために、原則的に有効ですコマンド(終了コードは(...)で囲まれていますが、サブシェルのコマンドが実行されるため、通常はではありません。が必要です)。 Bash manual onlineまたはセクションCONDITIONAL EXPRESSIONSman bash中を見る - これとは対照的に

は、次の構文 [[ ... ]]が何のためにあるのかである 表現を、評価するために探していました。

+2

答えはmklement0です。 Ashley、これがプロフェッショナルなプログラムならば、bashで安全なパスワードを扱う方法についてのチュートリアルやブログ記事を実行したいと思うでしょう。 – emery

+0

ありがとう@ mklemento0これは今作動する!私はソースコードを使用する前に実際にshellcheck.netを通してコードを実行しましたが、エラーは出ませんでした。私はこれがベストプラクティスではないことを認識していますが、これは私が完了している課題のためであり、これは要求された問題の一部です。 – Ashley

+0

@Ashleyそれを聞いてうれしい; shellcheck.netの再利用:わかった - 私の更新を見てください。 – mklement0

関連する問題