5

私は Unix シェル スクリプトに比較的慣れていません。これが私の問題です。私はこのスクリプトを使用しました...

isql -S$server -D$database -U$userID -P$password << EOF > $test
exec MY_STORED_PROC
go
EOF

echo $test

この結果を生成するには...

Msg 257, Level 16, State 1:
Server 'MY_SERVER', Procedure 'MY_STORED_PROC':
Implicit conversion from datatype 'VARCHAR' to 'NUMERIC' is not allowed.  Use
the CONVERT function to run this query.
(1 row affected)
(return status = 257)

isql の出力をエコーする代わりに、"257" を抽出して別の変数に貼り付け、スクリプトから 257 を返すことができるようにします。ある種の sed または grep コマンドでこれを行うと考えていますが、どこから始めればよいかわかりません。

助言がありますか?

4

2 に答える 2

13

bash は、シェル変数の内容から一部を削除できます。

${parameter#pattern}一致する先頭の部分を除いた $parameter の値を返しますpattern

${parameter%pattern}に一致する末尾の部分を除いた $parameter の値を返しますpattern

これを行うにはもっと良い方法があると思いますが、これでうまくいくはずです。したがって、これを次のように組み合わせることができます。

% strip the part before the value:
test=${test#Msg }
% strip the part after the value:
test=${test%, Level*}
echo $test

(return status = xxx)その部分に興味がある場合は、次のようになります。

result=${test#*(result status = }
result=${result%)*}
echo $result

bash マンページの関連セクションは「パラメーター拡張」です。

于 2009-05-20T16:06:30.460 に答える
2

これは簡単で汚いハックですが、実際に自分で学び始める必要があります。

RC=`tail -1 $test |sed 's/(return status = \([0-9]\+\))/\1/'`
于 2009-05-20T16:04:21.790 に答える