繁体   English   中英

将多个参数传递给bash

[英]Passing multiple arguments to bash

我有一个脚本,可根据您输入的参数启动某些节点

case "$1" in
    start)
        if [ "$2" == "puppet" ]; then
           set_puppet_variables
           check_ES_reqs
           start
        elif [ "$2" == "puppet1" ]; then
           set_puppet1_variables
           check_ES_reqs
           start
        elif [ "$2" == "master" ]; then
           set_master_variables
           check_ES_reqs
           start
        fi
        if [ "$2" == "" ]; then
             set_puppet_variables
             check_ES_reqs
             start
             set_master_variables
             check_ES_reqs
             start
         fi

我希望能够启动多个特定节点,例如,当我在命令服务中键入ES start puppet puppet1时 ,它将仅启动这两个节点。

有没有一种方法可以格式化$2来接受$3$4这取决于我添加了多少个节点? 因为会有更多。 就像将$2变成$2*以接受第二个参数以及其他任何参数一样,这样我就可以启动多个特定节点。

请帮忙

谢谢

$1移出参数列表,然后遍历其余参数。

case "$1" in
    start)
        shift
        while [ $# -ne 0 ]
        do
            case "$1" in 
                puppet)
                    ... ;;
                puppet1)
                    ... ;;
                master)
                    ... ;;
                "")
                    ... ;;
            esac
            shift
        done ;;

shift了你的命令,工作就休息。 这或多或少是我期望您的要求:

cmd="$1"
shift; # get rid of it.
if [ $# -eq 0 ]
then
  # if there are no parameters, use puppet and master
  set -- puppet master
fi

case "$cmd" in
  start)
    for node in "$@"
    do
      set_variables "$node" # slight rename here, make it easier to reuse
      check_ES_reqs
      start
    done
    ;;
  # ...
esac

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM