1

我想设置一个调用其他子 bash 脚本的主 bash 脚本

该脚本应按如下方式运行:./scriptname.sh 10001

10001:是定义要运行的脚本数量的参数(总共 5 个)。如果参数为 1,则启动子脚本,为 0 时不执行任何操作。

我创建了一个带有子脚本的表,例如:

subscript1=source "${DOCROOT}/script1.sh" subscript2=source "${DOCROOT}/script1.sh" ....
array=(${subscript1} ${subscript2} ${subscript3});

第一个问题是如何使用正则表达式或其他方法将每个位匹配为参数(删除参数之间的空格)。
第二个问题是我不知道如何将我的论点 (10001) 关联到 table subs 脚本。

在程序演变步骤的情况下, “切换案例”太长而无法实施和维护。

可以帮我构建主脚本吗?

4

1 回答 1

1

这是一种可能性:

#!/bin/bash

die() {
   echo >&2 "$@"
   exit 1
}

arg="$1"

# Check that argument is valid (only 0's and 1's)
[[ $arg =~ ^[01]+$ ]] || die "Wrong argument \`$1'"

nargs=${#arg}

for ((i=1;i<=nargs;++i)); do
   valuei=${arg:i-1:1}
   # If value is 0, continue loop
   ((valuei)) || continue
   # Execute script
   echo "Executing subscript $i"
done

样本输出:

$ ./scriptname 10001
Executing script 1
Executing script 5

编辑。当您询问如何执行下标时,这是一种(完全有效的)可能性:

#!/bin/bash

# Maximum number of subscripts
nsub=5

die() {
   echo >&2 "$@"
   exit 1
}

arg="$1"

# Check that we have argument of correct length
(( ${#arg}==nsub )) || die "Must give argument of length $nsub"

# Check that argument is valid (only 0's and 1's)
[[ $arg =~ ^[01]+$ ]] || die "Wrong argument \`$1'"

for ((i=1;i<=nsub;++i)); do
   # If value is 0, continue loop
   ((${arg:i-1:1})) || continue
   # Execute script
   source "${DOCROOT}/script$i.sh"
done
于 2012-11-17T12:59:23.460 回答