腳本怎麼指定返回值
本文擬以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語句。舉例如下:
運行後輸出結果為: