gpt4 book ai didi

arrays - Shell 脚本形成动态数组并触发基于它的进程

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:58 25 4
gpt4 key购买 nike

您好,我有一个要求。

我应该运行一个脚本,其中指定的参数数量如下所示。例如 ./build.sh a b checkout c build d e deploy

a、b、c、d、e、f 是实例的名称,结账、构建、部署是进程的名称。

所以我可以使用任何进程运行任何实例。

现在告诉我如何分离参数并在 shell 脚本中使用它们。

如果参数类型相似,我可以在数组中使用它们,并使用 for 循环和 switch case 检查每个参数。

在我的例子中,我必须分离参数并使其像这样运行

  1. 结帐 a 和 b。
  2. 为 c 构建
  3. 为 d 和 e 部署

需要形成多个动态数组和操作,例如

  1. a, b 应该形成一个数组,并且应该检测结账并开始正在执行。
  2. 类似于 c 应该形成一个数组并且应该检测构建处理并开始执行。
  3. d 和 e 应形成一个数组并运行部署过程。

建议我是否有其他实现方式并为我提供解决方案。

最佳答案

老式 POSIX shell:

#!/bin/sh

# Note: Inside the functions, $@, $1 etc. refer to the arguments to the function,
# whereas outside they refer to the arguments to the whole script.
foo() {
echo foo $@
}

bar() {
echo bar $3 $2 $1
}

PARAMS=

while [ $# -gt 0 ]; do # while there are arguments
case "$1" in # check if the front argument is a command
foo) # if so, run it with the previously cached parameters
foo $PARAMS # (see below)
PARAMS=
;;
bar)
bar $PARAMS
PARAMS=
;;
*) # if it is not a command, cache the parameter in the
PARAMS+=" $1" # $PARAMS variable
;;
esac

shift # shift the arguments back; what was $2 is now $1
done

调用为./foo.sh 1 2 foo 3 4 5 bar,这给出了

foo 1 2
bar 5 4 3

如果您需要使用 bash 数组,则语法为

PARAMS=()       # instead of PARAMS=
PARAMS+=("$1") # instead of PARAMS+=" $1"
${PARAMS[0]} # instead of $1, analogous for $2, $3 etc.

其余部分保持不变,当然你可以使用参数数组调用函数以外的其他东西。

关于arrays - Shell 脚本形成动态数组并触发基于它的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com