脚本怎么指定返回值
本文拟以SYBASE ASE 10.X和11.X数据库为例,说明如何在PB脚本当中获取存储过程的返回值。作为一个存储过程,其输出的结果数据可能包括三类:SELECT结果集、RETURN结果、OUTPUT参数。尽管输出方式众多,但PB脚本仅仅借助简单的FETCH…INTO…语句即可全部获取这些输出数据,具体方式如下:
(一)在SYBASE ASE 10.X和11.X数据库当中创建一个存储过程deptroster,其有一个输入参数@deptno、两个输出参数@totsal 和 @avgsal、一个RETURN值@number_of_emps以及包含职员姓名和工资的SELECT结果集,可见除了输入参数@deptno外,其他均为输出数据,我们需要在PB脚本中获取,具体代码如下:
CREATE PROCEDURE deptroster @deptno integer,
@totsal double precision output,
@avgsal double precision output
AS
DECLARE @number_of_emps integer
SELECT emp_fname, emp_lname, salary FROM employee
WHERE dept_id = @deptno
SELECT @totsal = sum(salary),
@avgsal = avg(salary),
@number_of_emps = COUNT(*) FROM employee
WHERE dept_id = @deptno
RETURN @number_of_emps;
二)PB脚本当中我们需要捕获SELECT结果集、RETURN值和两个输出参数,其输出顺序也是按照“SELECT结果集、RETURN值、输出参数”顺序输出,具体代码如下:
integer fetchcount = 0
long lDeptno, rc
string fname, lname
double dSalary, dTotSal, dAvgSal
lDeptno = 100
//此处声明存储过程名称
DECLARE deptproc PROCEDURE FOR
@rc = dbo.deptroster
@deptno = :lDeptno,
@totsal = 0 output,
@avgsal = 0 output
USING sqlCA;
//此处开始执行存储过程
EXECUTE deptproc;
//判断执行结果
CHOOSE CASE SQLCA.sqlcode
CASE 0
//如果返回0则表示执行成功,至少存在一个SELECT结果集
//借助LOOP循环开始捕获这个SELECT结果集
DO
FETCH deptproc INTO :fname, :lname, :dSalary;
CHOOSE CASE SQLCA.sqlcode
CASE 0
fetchcount++
CASE 100
MessageBox ("End of Result Set", &
string (fetchcount) " rows fetched")
CASE -1
MessageBox ("Fetch Failed", &
//此处关闭存储过程
CLOSE deptproc;
CASE 100
// 如果返回100,则表示没有返回结果集.
// 此时不需要单独执行CLOSE语句.
MessageBox ("Execute Successful", "No result set")
CASE ELSE
//其他情况则表示存储过程执行失败,提示用户即可
MessageBox ("Execute Failed", &
string (SQLCA.sqldbcode) " = " &
② 求问expect脚本怎么设置返回值
比如下面脚本用来做ssh无密码登陆,自动输入确认yes和密码信息,用户名,密码,hostname通过参数来传递
ssh.exp Python代码 #!/usr/bin/expect set timeout 10 set username [lindex $argv 0] set password [lindex $argv 1] set hostname [lindex $argv 2] spawn ssh--id -i .ssh/id_rsa.pub $username@$hostname expect "yes/no" send "yes\r" expect "password:" send "$password\r" expect eof执行脚本./ssh.exp root pasword hostname1
expect接收参数的方式和bash脚本的方式不太一样,bash是通过$0 ... $n 这种方式,而expect是通过set <变量名称> [lindex $argv <param index>],例如set username [lindex $argv 0]
③ shell脚本如何获取状态码返回值,如ok或error
楼上说的貌似没错,我没去执行看具体报什么错。
用awk是可以的,你需要用-F指定分隔符,然后再输出第几个串,楼上用的双引号作为分隔符,然后输出第四个串,应该是没问题的。
或者你也可以用其他语言,比如php,json_decode函数将这个穿转成数组,然后输入code的值,更加直观。
④ 每天三分钟搞定linux shell脚本26 函数返回值
函数可以产生返回值,有3个方法。
1)默认情况下是 最后一条语句对应的退出状态码
2) return 一个整数值
3)使用 echo语句 指定输出
针对 方法1 建立如下脚本:
运行后输出结果为:
针对 方法2 建立脚本:
运行后结果为:
针对 方法3 建立脚本
运行后输出结果为:
方法3使用echo语句来返回结果,而且 并没有把这个输出到stdout 中。
函数返回数组与参数传递数组一样,使用echo语句。举例如下:
运行后输出结果为: