首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash中使用if elif else

如何在bash中使用if elif else
EN

Stack Overflow用户
提问于 2021-08-02 13:05:39
回答 2查看 166关注 0票数 0

我不知道如何在bash中使用简单的if/elif/else结构。我真不敢相信,如此琐碎的事情竟然如此不直观、如此困难。我已经花了很多时间摆弄这个了。我想做的是这样的事情:

代码语言:javascript
复制
aaa="xxx"
if [[ $aaa -eq "bbb" ]]; then
   echo "bbb"
elif [[ $aaa -eq "ccc" ]]; then
   echo "ccc"
else
   echo "something else"
fi

我试过用一个[,用两个[[,用((,用==而不是-eq,我真的不是一个Linux的家伙,对语法非常困惑,我见过各种不同的语法,如果条件词的话。它总是打印bbb,不管aaa有什么值。有谁能给我解释一下如何做到这一点吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-02 13:08:57

-eq仅用于数字比较,欲了解更多信息请考虑阅读:

Shell相等运算符(=,==,-eq)

此外,考虑引用以下变量:

何时将引号包装在shell变量的周围?

  • -eq改为==
  • 引用变量
代码语言:javascript
复制
#!/bin/bash

aaa="xxx"
if [[ "$aaa" == "bbb" ]]; then
   echo "bbb"
elif [[ "$aaa" == "ccc" ]]; then
   echo "ccc"
else
   echo "something else"
fi

一些其他的东西

在网上试试!

票数 2
EN

Stack Overflow用户

发布于 2021-08-02 13:09:13

使用-eq进行数值比较,而不是用于字符串。此外,您使用的引号也不正确。使用双引号在展开变量时防止字段分裂。IOW,它们需要在变量周围,而不是在文字字符串(除非文字字符串包含空格或字符,这些字符将由shell解释,如回勾符或$等)。当case语句更合适时,不要使用if/else字符串。总体而言:

代码语言:javascript
复制
#!/bin/sh

aaa="$1"
if [ "$aaa" = bbb ]; then
        echo "bbb"
elif [ "$aaa" = ccc ]; then
        echo "ccc"
else
        echo "something else"
fi

case $aaa in
bbb) echo bbb;;
ccc) echo ccc;;
*) echo something else;;
esac

关于引号:在if [ "$aaa" = "bbb" ];case "$aaa" in中使用引号绝对没有错,但是在if [ $aaa = "bbb" ]中省略它们几乎总是错误的--允许在case $aaa invar=$aaa中省略引号,因为在这些情况下不会发生字段分裂,但是在这些情况下包含引号肯定是最好的做法。一般情况下,用引号周围的精彩绝伦。if [ $aaa = "bbb" ]是潜在错误的巨大来源,应该避免。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68622119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档