我想设置一个调用其他子bash scritps的主bash脚本
脚本应该按如下方式运行: ./scriptname.sh 10001
10001:是定义要运行的脚本数量的参数(总共5个)。如果参数为1,则子脚本启动,0处不执行任何操作。
我创建了一个包含子脚本的表,如:
subscript1=source "${DOCROOT}/script1.sh"
subscript2=source "${DOCROOT}/script1.sh"
....
array=(${subscript1} ${subscript2} ${subscript3});
第一个问题是如何使用正则表达式或其他匹配每个位作为参数(删除参数之间的空格)。
第二个问题是我不知道如何将我的参数(10001)与表子脚本相关联。
“ switch case ”太长,无法在程序演变步骤中实现和维护。
可以帮我构建主脚本吗?
答案 0 :(得分: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