if else条件在shell脚本中检查用户的空输入

时间:2017-11-16 07:12:48

标签: bash shell unix

我正在接受用户的输入,并希望如果用户提供空输入,则应显示错误消息,我正在尝试下面的代码,请在我错误的地方纠正我。

  #!/bin/bash
    echo "please enter previous version number"
    read prevversion
    echo "please enter new version number"
    read newversion
    echo "please enter environment [DEV2/QAT2/PPE2/PRD]"
    read env

    if[["$env"=" " &&"$prevversion"=" " &&"$newversion"= " "]]
    then
        echo "Please enter the details and try again"

    else

        if [ "$env" = "QAT2" ]
        then
                prevversion="$prevversion"_QAT2
                echo "previous version is $prevversion"
                newversion="$newversion"_QAT2
                echo "new version is $newversion"
                env="$env"
                echo "enviornment is $env"
        elif [ "$env" = "PPE2" ]
        then
                prevversion="$prevversion"
                echo "previous version is $prevversion"
                newversion="$newversion"
                echo "new version is $newversion"
                env="$env"
                echo "enviornment is $env"
        elif [ "$env" = "PRD" ]
        then
                prevversion="$prevversion"
                echo "previous version is $prevversion"
                newversion="$newversion"
                echo "new version is $newversion"
                env="$env"
                echo "enviornment is $env"
        elif [ "$env" = "DEV2" ]
        then
                prevversion="$prevversion"_DEV2
                echo "previous version is $prevversion"
                newversion="$newversion"_DEV2
                echo "new version is $newversion"
                env="$env"
                echo "enviornment is $env"
        fi


    fi

请为我提供正确的解决方案

4 个答案:

答案 0 :(得分:1)

您正在使用'&&'在你的if条件中,这意味着只有当每个(!)输入为空时才会显示错误消息: if[["$env"=" " &&"$prevversion"=" " &&"$newversion"= " "]]

你应该改变它:

if [ -z "${env}" ] || [ -z "${prevversion}" ] || [ -z "${newversion}" ]; then
    echo "either one of the vars is empty"
    exit 1
fi

答案 1 :(得分:1)

您需要使用||,而不是&&。你应该测试一个空字符串,而不是一个单独空格的字符串。

if [[ "$env" = "" || "$prevversion" = "" || "$newversion" = "" ]]

答案 2 :(得分:0)

按以下方式更改您的代码:

if [ -z "$env" ] || [ -z "$prevversion" ] || [ -z "$newversion" ]; then
    echo "either one of the vars is empty"
    exit 1
fi

这将检查至少有一个树变量是空的。 如果是这种情况print您的错误消息和exit脚本return code 1以显示脚本错误退出。

答案 3 :(得分:0)

使用-z检查空字符串,不要重复这么多代码。

#!/bin/bash
# Prompt for what should be command line arguments.  If
# the script is going to be used in a batch environment to read
# from a stream, then prompting is unhelpful.  If it is used
# in an interactive environment, it is easier to pass this
# data on the command line.
echo "please enter previous version number"
read prevversion
echo "please enter new version number"
read newversion
echo "please enter environment [DEV2/QAT2/PPE2/PRD]"
read env

if test -z "$env" || test -z "$prevversion" || test -z "$newversion"; then
        echo "Please enter the details and try again" >&2
        exit 1
fi

case "$env" in
QAT2)
        prevversion="$prevversion"_QAT2
        newversion="$newversion"_QAT2
;;
PPE2)
        prevversion="$prevversion"
        newversion="$newversion"
;;
PRD)
        prevversion="$prevversion"
        newversion="$newversion"
;;
DEV2)
        prevversion="$prevversion"_DEV2
        newversion="$newversion"_DEV2
;;
esac
echo "previous version is $prevversion"
echo "new version is $newversion"
echo "enviornment is $env"