我的变量id
删除了每个主题的名称。我对每一项都有具体的命令,所以我想说:
if [[$id = s001]]; then do something. End
if [[$id = "s002"]]; then do something else. End
诸如此类。
正确的做法是什么?多谢
答案1
解决此问题的典型方法是使用case
声明:
case $id in
(s001) do something
;;
(s002) do something else
do something additional
;;
(s003) do something else entirely
;;
(*) do something unexpected
;;
esac
这里有一些语法需要加强:
- 我喜欢将选项放在左括号和右括号中; close-paren 是必需的,但我更喜欢视觉平衡。
- 如果您想在列出的选项都不匹配时运行某些命令,则该
(*)
选项是包罗万象的。 - 每个匹配选项的命令应以
;;
;结尾还有其他不太常见的结束节的选项。我还倾向于将;;
' 放在单独的一行上,以便于轻松判断我已适当地结束了这些节。
答案2
正如夏勒上面所说,案件陈述非常快。否则,如果您更喜欢条件语句,您可以编写如下内容:
if [[ -n "${id}" ]]; then
if [[ "${id}" == "s001" ]]; then
echo "do something"
elif [[ "${id}" == "s002" ]]; then
echo "do something else"
fi
fi
注意:-n 测试是为了验证 id 是否已设置,这样比较就不会出错。这是一个条件包装器,以避免重新评估。