
テストする必要があるいくつかのパラメータの終了コードを見つけるためにこのスクリプトを作成しました。これで、終了コードを確認するためにこのスクリプトを呼び出す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
答え2
これが2番目のスクリプトであるとしましょう。
#/bin/bash
shopt -s -o nounset
./script1.sh
result=$?
echo $result
変数に割り当てる理由は、将来の処理のために保存するためです。呼び出すと、$?
他のプログラムと関連があるはずです。
$?
前のスクリプトが返した内容は次のとおりです。