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

问题描述 投票:0回答:1

在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存在,它说File Found;如果我删除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

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


应@codeforester的要求:

ls -l $HOME/.ssh/id_rsa
-rw------- 1 menasheh menasheh 3243 Feb 13 22:52 /home/menasheh/.ssh/id_rsa`
bash if-statement expression
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.