如何在bash脚本中编写多个if条件?
我不熟悉bash脚本,我希望有if条件梯形图如何在bash脚本中编写多个if条件?,bash,Bash,我不熟悉bash脚本,我希望有if条件梯形图 我正在读取一个字符串,希望根据该字符串处理正确的if条件。 逻辑如下- 如果字符串包含子字符串-deploy,则仅允许其进入If条件阶梯。 如果字符串同时包含-functions和-layer子字符串,则只需调用我的第一个If条件块, elsif检查-函数子字符串 elsif检查-层子字符串 到目前为止,我已经想出了以下代码- commitMessage='[STABLE] -deploy -functions [one,two] -layer so
我正在读取一个字符串,希望根据该字符串处理正确的if条件。
逻辑如下- 如果字符串包含子字符串
-deploy
,则仅允许其进入If条件阶梯。如果字符串同时包含
-functions
和-layer
子字符串,则只需调用我的第一个If条件块,elsif检查
-函数
子字符串elsif检查
-层
子字符串到目前为止,我已经想出了以下代码-
commitMessage='[STABLE] -deploy -functions [one,two] -layer some commit message'
if [[ ($commitMessage == *"deploy"* ) && ($commitMessage == *"functions"*) || ($commitMessage == *"layer"*) ]] ; then
if [[ ($commitMessage == *"functions"*) && ($commitMessage == *"layer"*) ]] ; then
echo 'functions and layer'
fi
elsif [[ $commitMessage == *"functions"* ]] ; then
echo 'functions only'
fi
elsif [[ $commitMessage == *"layer"* ]] ; then
echo 'layer only'
fi
fi
syntax error near unexpected token `elif'
我收到elsif的语法错误-commitMessage='[STABLE] -deploy -functions [one,two] -layer some commit message'
if [[ ($commitMessage == *"deploy"* ) && ($commitMessage == *"functions"*) || ($commitMessage == *"layer"*) ]] ; then
if [[ ($commitMessage == *"functions"*) && ($commitMessage == *"layer"*) ]] ; then
echo 'functions and layer'
fi
elsif [[ $commitMessage == *"functions"* ]] ; then
echo 'functions only'
fi
elsif [[ $commitMessage == *"layer"* ]] ; then
echo 'layer only'
fi
fi
syntax error near unexpected token `elif'
我指的是这个,但不明白我做错了什么-代码的问题是在嵌套的
if
子句中使用了不正确的if
子句终止符,并对else-if分支使用了不正确的关键字,即elif
而不是elsif
(后者在Python中使用)。看
但是在这种情况下,case
语句更具可读性,可以写成
if [[ $commitMessage == *"-deploy"* ]]; then
case "$commitMessage" in
*"-functions"*"-layer"*) echo 'functions and layer' ;;
*"-functions"*) echo 'functions only' ;;
*"-layer"*) echo 'layer only' ;;
*) echo 'no match'
esac
fi
我认为您不应该使用
elsif
,而应该使用elif
。
您可以参考以下文档。
错误显示为
elif
,但您问题中的代码使用elsif
(带s)。您是否始终使用elif
?另外,shellcheck.net可能能够指出这个问题。假设您的原始代码是elif
(如在错误消息中),那么主要错误是elif
之前的fi
s。只需移除它们。感谢@Inian使用switch比我的案例中凌乱的if-else嵌套更干净