因此,我简化了这段代码。每次运行时,总是执行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
答案 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