2014-02-13 40 views
0

我想推我的输入参数通过两组检查。每一项检查都是一项功能。因此,在KSH.Case满足第一个条件之后,它将“esac”。一个更优雅的方式来做嵌套,如果然后条件

die() { 
     echo "ERROR: $*. Aborting." >&2 
     exit 1 
    } 

    var=$1 
    var1=$2 
    [ -z "$var1" ] && var1=$var 
    echo "var is $var . Var1 is $var1 " 


    # test $var1 != $var2 || 
    dtc() { 
    # small function where I am checking if the input parameter is a valid date 
    } 

    vlc(){ 
# function where I am checking if the input parameters year is after 2012, because earlier years cannot exist 
} 

if dtc $var && dtc $var1 
then 
    if vlc $var && vlc $var1 
    then 
    stuff 
    else 
    die "message" 
    fi 
else 
    die "message" 
fi 

嵌套的if看起来有点笨拙。如果有更优雅的方式传达给壳。

回答

2

改善缩进将大大提高可读代码的可读性。

如果die消息是不同的,那么你别无选择。如果它们是相同的,那么你可以结合条件:

如果你只是想死,如果不是所有的命令是成功的,你可以写

dtc "$var" && dtc "$var1" && 
vlc "$var" && vlc "$var1" || die "message" 
# OK, all passed 
stuff 

一种风格尖端的if-else是把较短块第一

if ! { dtc "$var" && dtc "$var1"; } 
then 
    die "message 1" 
else 
    if ! { vlc "$var" && vlc "$var1"; } 
    then 
     die "message 2" 
    else 
     we will do 
     lots of stuff 
     here 
    fi 
fi 

当然和,函数封装代码

stuff() { 
    we will do 
    lots of stuff 
    here 
} 
相关问题