スクリプトで終了コードを読む

スクリプトで終了コードを読む

テストする必要があるいくつかのパラメータの終了コードを見つけるためにこのスクリプトを作成しました。これで、終了コードを確認するためにこのスクリプトを呼び出す2番目のスクリプトを作成する必要があります。ただし、2番目のスクリプトはこのスクリプトの終了コードを読み、テキストを割り当てる必要があります。

例:

通過/etc/resolve.confしたら、次のようにecho $?戻ります。0

今私はfound fileエコのようなものが欲しい。

終了コードを探す最初のスクリプトです。

#/bin/bash
shopt -s -o nounset

if [ $# != 1 ]; then
    exit 2
fi

if [[ ${1:0:1} = /* ]]; then
    :
else
    exit 3
fi

if [ -f ${1} ]; then
    exit 0
else
    exit 1
fi

これが私の2番目のスクリプトがあるところです。 ./script1.shを呼び出した後、終了コード0を= textに設定する方法を理解できません。

#/bin/bash
shopt -s -o nounset
./script1.sh

この例のように、script1にechoを含める方が簡単になることがわかりますが、この場合は2番目のファイルから読む必要があります。

if [ -f ${1} ]; then
    echo "file found"
    exit 0
else
    echo "file not found"
    exit 1
fi

ベストアンサー1

電話した電話番号script1.shは次のとおりです。

./script1.sh

呼び出された後、スクリプトの終了コードは$?

ただし、引数なしでスクリプトを呼び出すと、スクリプトヘッダーで引数の数がテストされ、正確に1以外の場合はエラーコード2で終了します。これはあなたのコメントに記載されている動作と一致します。

if [ $# != 1 ]; then
    exit 2
fi

電話をかけてscript1.shいくつかの主張を提起することもできます。基本スクリプトから受け取ったパラメータを渡すには、次のようにします。

./script1.sh "$@"   # pass all arguments

または

./script1.sh "$1"   # pass the first argument

(後者は基本スクリプトに引数が与えられていなくても空の文字列を渡しますが)


マイナーな問題で変数の拡張を引用する必要があります(たとえば、代わりに"$#"または $#代わりに"${1}")。そうしないと、ファイル名にスペースが含まれている場合、またはスクリプトが起動したときに奇妙な値に設定されていても、スクリプトは失敗します。"$1"${1}$#IFS

また、代わりに

if something; then
    :
else
    exit 3
fi

書くことができます

if ! something; then
    exit 3
fi

おすすめ記事