我想设置一个主 bash 脚本来调用其他 sub bash scritps
脚本应按如下方式运行:./scriptname.sh 10001
10001:是定义要运行的脚本数(总共 5 个)的参数。 如果参数为 1,则子脚本启动,在 0 时,不执行任何操作。
我创建了一个带有子脚本的表,如下所示:
subscript1=source "${DOCROOT}/script1.sh"
subscript2=source "${DOCROOT}/script1.sh"
....
array=(${subscript1} ${subscript2} ${subscript3});
第一个问题是我如何使用正则表达式或其他方式将每个位与参数匹配(删除参数之间的空格)。
第二个问题是我不知道如何将我的参数 (10001) 与表子脚本相关联。
在程序演变步骤的情况下,"切换案例"太长而无法实现和维护。
可以帮助我构建主脚本吗?
这是一种可能性:
#!/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