1

他のサブ bash スクリプトを呼び出すマスター bash スクリプトをセットアップしたい

スクリプトは次のように実行する必要があります: ./scriptname.sh 10001

10001: 実行するスクリプトの数を定義する引数です (合計 5)。引数が 1 の場合、サブスクリプトが開始され、0 の場合、アクションはありません。

次のようなサブスクリプトを使用してテーブルを作成しました。

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

最初の問題は、正規表現などを使用して各ビットを引数として一致させる方法です (引数間のスペースを削除します)。
2 番目の問題は、引数 (10001) をテーブル サブスクリプトに関連付ける方法がわからないことです。

スイッチケース」は、プログラムの進化ステップの場合に実装および維持するには長すぎます。

マスター スクリプトの作成を手伝ってもらえますか?

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 に答える