复杂的if-then-else语句

时间:2019-11-20 06:41:08

标签: bash

因此,我简化了这段代码。每次运行时,总是执行else$msg4。如何更改它,使其仅在else部分不匹配的情况下$nick起作用?

if [ "$who" = "$nick1" ]
    then echo $msg1
fi   
if [ "$who" = "$nick2" ] 
    then echo $msg2
fi  
if [ "$who" = "$nick3" ] 
    then echo $msg3   
else $msg4 
fi   

2 个答案:

答案 0 :(得分:2)

在这里您可以了解Bash if语句的工作方式:https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs

您可以看到这里有一个elif,您应该使用它来将多个if-else东西链接在一起,以便仅在if语句都不匹配的情况下执行最终else。结果:

if [ "$who" = "$nick1" ]
then
    echo $msg1
elif [ "$who" = "$nick2" ]
then
    echo $msg2
elif [ "$who" = "$nick3" ]
then
    echo $msg3
else
    echo $msg4
fi 

如果您在then之前添加if,也可以将;写在then的同一行:

if [ "$who" = "$nick1" ]; then
    echo $msg1
elif [ "$who" = "$nick2" ]; then
    echo $msg2
elif [ "$who" = "$nick3" ]; then
    echo $msg3
else
    echo $msg4
fi 

这通常更容易阅读。

答案 1 :(得分:1)

使用case .. esac

case "$who" in
"$nick1") echo "$msg1";;
"$nick2") echo "$msg2";;
"$nick3") echo "$msg3";;
*)        echo "$msg4";;
esac