2014-02-13 67 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 
} 
相關問題