只要变量为空,就运行循环

时间:2012-11-02 22:46:59

标签: shell

我有一个小脚本,用于检查git配置中是否存在用户名和电子邮件,否则提示用户输入:

GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
while [[ -z $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"
done

虽然不起作用;)

1 - 它首先甚至没有进入循环。 我的猜测是,与grep不同,awk会在变量中插入一些(隐藏的?)字符。 第二 - 我不确定脚本是否可以识别现在有值,因为我在循环外声明了变量。这个假设我错了吗?

编辑:

我通过使用反引号而不是引号来解决第一个问题。 第二个问题仍然存在 - 必须有一个更好的使用,而不是两次声明变量?!什么东西沿着做...在壳中?

编辑#2:

这样做的好一点,但有一个相当长的条件语句。它可能更短吗?

while [[ -z $GIT_USER_EXISTS || -o $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS || -o $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"

    GIT_USER_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
    GIT_EMAIl_EXISTS=`git config --get-regexp 'name' | awk '{print $2}'`
done

实际上它几乎可以解决问题 - 它应该是“如果设置了var并且为空或者没有设置var”。但这太长了:)

1 个答案:

答案 0 :(得分:1)

尝试这样做:

GIT_USER_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
GIT_EMAIl_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
while [[ -z $GIT_USER_EXISTS || -z $GIT_EMAIl_EXISTS ]]; do
    echo "User name and Email are not set in git. Please enter them now..."
    echo "First and Last name:"
    read gitUser
    git config --global user.name "$gitUser"
    echo "Email:"
    read gitEmail
    git config --global user.email "$gitEmail"
    GIT_USER_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
    GIT_EMAIl_EXISTS="git config --get-regexp 'name' | awk '{print $2}'"
done
  • 如果您测试$GIT_USER_EXISTS$GIT_EMAIl_EXISTS,则应在某处声明;)