首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行bash脚本时,Linux跳过了over语句吗?

在运行bash脚本时,Linux跳过了over语句吗?
EN

Stack Overflow用户
提问于 2020-04-24 01:28:48
回答 1查看 58关注 0票数 1

所以我得让它说那个人不在课堂上。似乎它跳过了else语句。有什么问题吗?

代码语言:javascript
复制
if [ $# == 1 ]; then

    if  grep "$1" /acct/common/CSCE215 | cut -d ',' -f1-3 | tr ',' ' '; then
    true

    else
            echo "Sorry that person is not in CSCE215 this semester"
    fi

else
    echo "Command line arguments are not equal to 1"
    echo "$#"
fi
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-24 01:51:42

管道命令的退出代码是最后一个命令的退出代码(在您的示例中是tr,它始终是0)。

如果其中一个命令失败,请在脚本中使用set -o pipefail选项中断管道。

示例:

代码语言:javascript
复制
$ echo foo | grep bar | tr o a ; echo $?
0
$ set -o pipefail ; echo foo | grep bar | tr o a ; echo $?
1

所以你的剧本可能是:

代码语言:javascript
复制
set -o pipefail

if [ $# -eq 1 ]; then
    if  grep "$1" /acct/common/CSCE215 | cut -d ',' -f1-3 | tr ',' ' '; then
        true
    else
        echo "Sorry that person is not in CSCE215 this semester"
    fi
else
    echo "Command line arguments are not equal to 1"
    echo "$#"
fi

PS:使用set +o pipefail恢复通常的行为。

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

https://stackoverflow.com/questions/61399593

复制
相关文章

相似问题

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