检查文件是否作为较长表达式的一部分存在

时间:2017-02-14 04:29:42

标签: bash if-statement expression

在bash脚本中,我需要提示用户输入电子邮件地址,但前提是没有设置git user.email或没有ssh密钥。我对bash的经验很少,所以我一直在为这个项目一次又一次地进行stackoverflow。

基于this stackoverflow answer,我提出了这个问题:

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

这具有预期的行为:如果存在id_rsa,则表示文件已发现;如果我删除id_rsa,则表示找不到文件。

然而,我无法将其作为更长时间表达的一部分。这是我到目前为止所做的:

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

这将始终打印未找到文件。我尝试了括号,双括号和括号的各种组合,希望将第二个和第三个表达式从第一个表达式中隔离出来,并以可能使其工作的方式将第三个表达式与其余表达式隔离开来。一切都无济于事。我错过了什么?

应@codeforester的要求:

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

1 个答案:

答案 0 :(得分:0)

你可以这样做:

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为空时,
  • ! $md_email为真;同样适用于! $git_email以及

检查id_rsa存在的if条件对我来说很好。请在问题中加入ls -l $HOME/.ssh/id_rsa的输出。

您可能希望看到此帖子:How to use double or single brackets, parentheses, curly braces