Linux函数返回值判断if,bash函数内判断命令执行结果并返回

本文介绍了如何在Bash编程中避免重复的错误检查和返回语句,通过创建别名`CHECKRETURN`来实现命令执行结果的自动判断。当命令执行失败时,`CHECKRETURN`会打印错误信息并返回指定的错误码。虽然别名参数限制只能接受一个参数,但通过将返回值和错误信息组合成一个参数进行传递,实现了类似的功能。这种方法在处理大量命令检查时能有效减少代码冗余。
摘要由CSDN通过智能技术生成

bash函数内判断命令执行结果并返回

需求背景

在bash编程中,经常会需要执行对命令的结果判断,如果正确继续执行,如果不正确则返回。

function foo() {

run_a_cmd

if [ $? -ne 0 ]; then

echo "ERROR: ..."

return 1

fi

}

这是一个标准的流程;

现在遇到的问题是,对函数内的每一个语句都需要判断,都需呀重复上述4条语句;当函数的语句很多时,命令就闲的很冗余。

function foo() {

run_a_cmd

if [ $? -ne 0 ]; then

echo "ERROR: ..."

return 1

fi

run_b_cmd

if [ $? -ne 0 ]; then

echo "ERROR: ..."

return 1

fi

run_c_cmd

if [ $? -ne 0 ]; then

echo "ERROR: ..."

return 1

fi

}

能不能简化一下判断的4条语句呢。

bash的expand_aliases可以用来解决这个问题。

expand_aliases用法

#!/bin/bash

shopt -s expand_aliases

alias CHECKRETURN='{

ret=${?}

if [ ${ret} -ne 0 ]; then

read errmsg

echo ${errmsg}

return ${ret}

fi

}<<

function foo() {

run_a_cmd

CHECKRETURN "ERROR: ..."

run_b_cmd

CHECKRETURN "ERROR: ..."

run_c_cmd

CHECKRETURN "ERROR: ..."

}

这里CHECKRETURN的作用是判断前一条命令的返回值是否为0

如果是0,则什么也不做

如果非0,则打印错误信息,并返回。

注意这里的CHECKRETURN是一个alias,不是一个函数,在shell执行是会展开,否则它里面的return语句将会是从CHECKRETURN返回,而不是从函数foo返回了。

遗憾的是CHECKRETURN只能带一个参数,不能是两个及以上参数;理想的定义是:

CHECKRETURN {RETVAL} "{ERRMESSAGE}"

即指定一个数字返回值,然后打印出错误信息;但是确实不支持也没有办法;不过一个折中的办法虽然很难看,但也能凑合用,就是把{RETVAL}写到"{ERRMESSAGE}",即"{RETVAL} {ERRMESSAGE}",也就是假装还是一个参数,然后在RETURN里面分析这一个参数,取出第一个字段作为{RETVAL},剩下的作为{ERRMESSAGE}。

alias RETURN='{

ret=${?}

if [ ${ret} -ne 0 ]; then

read retp errmsg

echo "${errmsg}"

return ${retp}

fi

}<<

然后调用折用法:

run_a_cmd

CHECKRETURN "12 ERROR: ..."

run_b_cmd

CHECKRETURN "13 ERROR: ..."

run_c_cmd

CHECKRETURN "14 ERROR: ..."

即,如果run_a_cmd失败则返回12,run_b_cmd失败则返回13,run_c_cmd失败则返回14。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值