BASH案例陈述中的无限选择

时间:2016-02-08 13:44:49

标签: bash

考虑这个简单的bash片段:

case $OPTION in
  1)
    IMAGE=${options[0]%.tar}
    ;;
  2)
    IMAGE=${options[1]%.tar}
    ;;
  3)
    IMAGE=${options[2]%.tar}
    ;;
  4)
    IMAGE=${options[3]%.tar}
    ;;
  *)
    echo "invalid option"
    exit 1
esac

在我的真实剧本中,数字上升到30.这使得它很长。 我可以用某种方式指定具有变量的案例吗?

这样的事情:

case $OPTION in
  $i)
    IMAGE=${options[$(($i-1))]%.tar}

非常感谢任何指针。

2 个答案:

答案 0 :(得分:3)

您可以在单个子句中匹配多个模式:

MG= nx.from_pandas_edgelist(df, 'gene1', 'gene2', edge_attr=['conf','type'], 
                             create_using=nx.MultiGraph())

MG.edges(data=True)
MultiEdgeDataView([('geneA', 'geneB', {'conf': 0.05, 'type': 'method1'}),
                   ('geneA', 'geneB', {'conf': 0.45, 'type': 'method2'}),
                   ('geneA', 'geneC', {'conf': 0.45, 'type': 'method1'}), 
                   ('geneA', 'geneD', {'conf': 0.35, 'type': 'method1'})])

如果仍然为您打字太多,您可以使用一些简单的模式匹配:

case $OPTION in
    1|2|3:
       echo "$OPTION is one, two or three"
       ;;
esac

答案 1 :(得分:3)

哦,我的,干:

if (( 1 <= OPTION && OPTION <= 30 )); then
    IMAGE=${options[OPTION-1]%.tar}
else
    echo "invalid option" >&2
    exit 1
fi