首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sh中查看函数的状态码?

如何在sh中查看函数的状态码?
EN

Stack Overflow用户
提问于 2013-06-21 13:09:44
回答 2查看 428关注 0票数 0

我正在将我的脚本从bash转换为dash...并且在获取函数的返回码时遇到问题。

代码语言:javascript
复制
#!/bin/sh
check_ip() {
    local netbit=`echo "$1" | awk -F\/ '{print $1}'`
    local netmask=`echo "$1" | awk -F\/ '{print $2}'`

    if case "$netbit" in
        *[!.0-9]* | *.*.*.*.* | *..* | [!0-9]* | *[!0-9] ) false ;;
        *25[6-9]* | *2[6-9][0-9]* | *[3-9][0-9][0-9]* | *[0-9][0-9][0-9][0-9]* ) false;;
        *.*.*.* ) true ;;
        * ) false ;;
    esac; then
        if [ ! -z "$netmask" ] ; then
            if [ "$netmask" -ge 1 ] && [ "$netmask" -le 32 ] ; then
                return 0
            else
                return 1
            fi
        else
            return 0
        fi
    else
        return 1
    fi
}

# this is working without the [] thing.
if check_ip "$1" ; then
    echo ok
else
    echo no
fi

在另一台机器上查找类似的脚本,它没有@barmar建议的[]。现在都能用了。非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 13:22:56

if命令根据命令的退出状态选择thenelse子句。只有当您想要执行test命令中定义的测试时,才使用[;如果您只想测试某个特定命令,则可以直接使用它。

代码语言:javascript
复制
if check_ip "$ip"
then echo Good IP
else echo Bad IP
fi

$!也不太可能是函数的合适参数。$!是启动的最后一个后台进程的PID,而不是IP。

票数 0
EN

Stack Overflow用户

发布于 2013-06-21 13:13:28

$?读取执行的最后一个命令的退出状态。

代码语言:javascript
复制
a() {
  return 0;
}

b() {
  return 1;
}

a;
echo $?;
b;
echo $?;

将返回:

代码语言:javascript
复制
0
1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17228065

复制
相关文章

相似问题

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