我正在接受用户的输入,并希望如果用户提供空输入,则应显示错误消息,我正在尝试下面的代码,请在我错误的地方纠正我。
#!/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
请为我提供正确的解决方案
答案 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"