如果条件那么嵌套的更优雅方式

时间:2014-02-13 17:58:11

标签: shell if-statement conditional case logical-operators

我想通过两组检查来推送输入参数。每个检查都是一个功能。所以情况不会起作用,因为在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

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

1 个答案:

答案 0 :(得分: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
}