2017-02-14 5 views
0

bashスクリプトでは、git user.emailが設定されていないか、sshキーがない場合にのみ、ユーザーにメールアドレスを入力する必要があります。私はbashの経験がほとんどないので、私はこのプロジェクトのために何度もstackoverflowに来ています。 this stackoverflow answerに基づいてBash - ファイルが長い式の一部として存在するかどうかを調べる

、私はこの思い付いた:

if [[ ! -f "$HOME/.ssh/id_rsa" ]]; then 
    echo "No File Found" 
else 
    echo "File Found" 
fi 

これは期待される動作があります。id_rsaが存在する場合、それはファイルが見つかり言います。 id_rsaを削除すると、No File Foundと表示されます。

しかし、私は長い表現の一部としてこれを動作させることはできません。ここで私がこれまで持っているものです。

md_email=$4 

... more code ... 

if [[ "$md_email" = "" && "`git config --get user.email`" = "" || ! -f "$HOME/.ssh/id_rsa" ]]; then 
    echo "No File Found" 
else 
    echo "File Found" 
fi 

これは常に印刷んが、ファイルが見つかりません。 2番目と3番目の式を最初のものから分離し、3番目の式を他のものと分離して動作させる方法で、ブラケット、二重括弧、およびかっこのさまざまな組み合わせを試しました。すべて無駄に。私は何が欠けていますか?

@codeforesterの要請

:あなたはこれを行うことができ

ls -l $HOME/.ssh/id_rsa 
-rw------- 1 menasheh menasheh 3243 Feb 13 22:52 /home/menasheh/.ssh/id_rsa` 
+0

「XとYまたはZが場合は、」あいまいなの一種です。 「If(X and Y)or Z」、「If X and(Y or Z)」という意味ですか? – Guest

+0

Xと(YまたはZ)であることが意図されていましたが、その構文についてはわかりませんでした。ちょうどかっこですか? – Menasheh

+1

構文は '[[X]] && [[Y || Z]];それから...。 – Guest

答えて

0

:$ md_emailが空の場合

md_email=$4 
git_email=$(git config --get user.email) 
if [[ ! $md_email ]] && [[ ! $git_email || ! -f "$HOME/.ssh/id_rsa" ]]; then 
    echo "user.email not set or id_rsa is not present" 
fi 
  • ! $md_emailがtrueになります。同じことは、あなたのid_rsaとの存在を確認するための条件は、私にはよさそうだ場合

としても! $git_emailに適用されます。ご質問にls -l $HOME/.ssh/id_rsaの出力を含めてください。

あなたはこの記事を見てみたいことがあります。How to use double or single brackets, parentheses, curly braces

+0

これはテストファイルです。本当に、md_emailは '$ 4'へのコマンドライン引数として設定されています – Menasheh

+0

私は混乱しています。あなたの質問に実際のコードを追加してください。 – codeforester

+0

これは関係ないですが、要点はコマンドを単純化したことです。 – Menasheh

関連する問題