変数が定義されていない場合のスクリプト実行の防止

変数が定義されていない場合のスクリプト実行の防止

次のスクリプトがあります。

c=0
for f in */*; do
cp -v "$f" "/myhome/CE$(printf '%0*d' 2 $BATCHNUM)-new-stuctures_extracted/test-$(printf '%0*d' 5 $c)"
c=$((c=c+1))
done

ただし、ユーザーはBATCHNUMを呼び出す変数を提供する必要があります。それ以外の場合は、スクリプトの実行を強制的に停止する必要があります。このスクリプトを呼び出すスクリプト(またはこのスクリプトを呼び出す#2スクリプトを呼び出す#1スクリプト)も強制的に停止できれば、より良いでしょう。

ベストアンサー1

最速の方法は、おそらくスクリプトの先頭に次の2行を追加することです。

set -u # or set -o nounset
: "$BATCHNUM"

最初の行は、設定nounsetされていない変数を拡張しようとすると、中断されるスクリプトを実行するシェルでオプションを設定します。 2 行目は、$BATCHNUM他の操作を実行する前に中断をトリガーするために、no-op コンテキストで拡張されます。

より便利なエラーメッセージが必要な場合は、次のように書くことができます。

if [[ -z "$BATCHNUM" ]]; then
    echo "Must provide BATCHNUM in environment" 1>&2
    exit 1
fi

またはそのようなもの。

おすすめ記事