我是bash脚本的新手,我希望有条件阶梯
我正在读取一个字符串,基于该字符串,我希望处理正确的if条件。
逻辑如下-
如果字符串包含子字符串-deploy
,则仅允许其输入if条件阶梯。
如果该字符串同时包含-functions
和-layer
子字符串,那么只有第1个条件块需要调用,
elsif检查-functions
子字符串
elsif检查-layer
子字符串
到目前为止,我已经提出了以下代码-
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
我遇到了elsif的语法错误-
syntax error near unexpected token `elif'
我是指此人,但不明白我在做什么错-
Bash IF : multiple conditions
答案 0 :(得分:1)
您的代码存在问题,就是在嵌套的if
子句中使用了不正确的if
子句终止符,并且在分支时使用了不正确的关键字else分支了elif
而不是elsif
(后者用于Python)。参见https://ideone.com/1sw0q5
但是在这种情况下,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
答案 1 :(得分:0)
我相信您不应该使用elsif
,而应该使用elif
。
您可以参考以下文档。
https://tecadmin.net/tutorial/bash-scripting/bash-if-else-statement/