我怎么能structprogramme?

时间:2012-11-17 12:42:36

标签: bash

我想设置一个调用其他子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 ”太长,无法在程序演变步骤中实现和维护。

可以帮我构建主脚本吗?

1 个答案:

答案 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