次のシェルスクリプトの指示は奇妙に動作します。
ARG_DATE=`sqsh -S $SERVER -U $DB_USER -P $DB_PASSWORD -D dbname -h<<END
SET NOCOUNT ON
go
select convert(varchar, PRIOR_COB_DATE, 112) from TABLE
go
END`
echo $ARG_DATE
if [ "${ARG_DATE}" != "1" ] && [ "${ARG_DATE}" != " " ]; then
if [ ${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1" ]; then
PRIOR_POSITION_DATE=${ARG_DATE}
echo "assigned " $PRIOR_POSITION_DATE
else
echo "Date must be in follow format: YYYYMMDD"
echo "POSITION_DATE will be used."
fi
fi
URL_PARAMS="HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=${PRIOR_POSITION_DATE}"
echo $URL_PARAMS
echo ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
wget -o ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
if [ -f ${CONNECTION_STATUS_FILE} ]; then
RESPONSE_STATUS=`grep -o '200 OK' ${CONNECTION_STATUS_FILE}`
if [ -z "${RESPONSE_STATUS}" ]; then
echo Login failed.
exit 3
fi
# rm ${CONNECTION_STATUS_FILE}
fi
wgetの実行中に空白のデータベースプロシージャがデータベース日付の文字列を変換できないため、多くの空白が発生します。sed
スペースを削除できますが、考えられる理由を知りたいです。
ログイン CONNECTION_STATUS_FILE
http://XXXXX:7001/MYAPP/HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=%2020130523%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
ベストアンサー1
echo
末尾のスペースは表示されません。これにはこのようなものが必要ですecho "${URL_PARAMS}x"
。通話set -x
の直前の作業wget
とset +x
通話の直後の作業を実行して、wget
通話がどのように機能するかを確認できます。
問題はシェルの単語分割です。
${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1"
変える
"${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1}" = "1"
解決策は(固定)行の前に置くことです。
ARG_DATE="${ARG_DATE// /}"