5

我对 Unix shell 脚本比较陌生。这是我的问题。我用过这个脚本...

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 可以从 shell 变量的内容中剥离部分内容。

${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/(返回状态 = \([0-9]\+\))/\1/'`
于 2009-05-20T16:04:21.790 回答