我对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)
我想提取“257”并将其粘贴到另一个变量中,而不是回显isql输出,所以我可以从脚本中返回257。我在想某种sed或grep命令可以做到这一点,但我真的不知道从哪里开始。
有什么建议吗?
答案 0 :(得分:13)
bash可以从shell变量的内容中删除部分。
${parameter#pattern}
返回$参数的值,而不是匹配pattern
的开头的部分。
${parameter%pattern}
返回$参数的值,而不包含与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联机帮助页的相关部分是“参数扩展”。
答案 1 :(得分:2)
这是一个快速而又脏的黑客,虽然你应该自己开始学习这些东西:
RC=`tail -1 $test |sed 's/(return status = \([0-9]\+\))/\1/'`