當前位置:首頁 » 編程軟體 » 腳本後台雲端計數器

腳本後台雲端計數器

發布時間: 2023-07-23 13:01:25

linux借用外部命令expr,實現計算器功能,利用管道,進程

test指令(使用指令man查詢)

功能:檢查文件類型,值比較。

test的各種參數和使用。

test EXPRESSION1 –a EXPRESSION2

當表達式1和表達式2同時為真時值為真

test EXPRESSION1 –o EXPRESSION2

當表達式1或者表達式2為真時值為真

test –n STRING

或者

test STRING

當STRING串的長度不為零時值為真

test –z STRING

當STRING串長度為零時值為真

test STRING1 = STRING2

當STRING1和STRING2相同時值為真

test STRING1 != STRING2

當STRING1 和 STRING2不同時值為真

test INTEGER1 –eq INTEGER2

當INTEGER1等於INTEGER2時值為真

test INTEGER1 –ge INTEGER2

當INTEGER1大於或者等於INTEGER2時值為真

test INTEGER1 –gt INTEGER2

當INTEGER1 大於INTEGER2時值為真

test INTEGER1 –le INTEGER2

當INTEGER1小於等於INTEGER2時值為真

test INTEGER1 –lt INTEGER2

當INTEGER1 小於INTEGER2時值為真

test INTEGER1 –ne INTEGER2

當INTEGER1不等於INTEGER2時值為真

test FILE1 –ef FILE2

當FILE1和FILE2有同樣的device和inode號時為真(詳細見linux文件學習筆記)

test FILE1 –nt FILE2

當FILE1修改時間比FILE2新時值為真

test FILE1 –ot FILE2

當FILE1修改時間比FILE2舊時值為真

test –b FILE

FILE存在並且內容是block類型的

test –c FILE

FILE存在並且是字元類型的

test –d FILE

FILE存在並且是一個目錄

test –e FILE

FILE是否存在

test –f FILE

FILE存在並且是一個正則表達式類型的文檔

test –g FILE

FILE存在並且是 set-group-ID也就是SGID(詳細見後文學習筆記)

test –G FILE

FILE存在並且由有效的GROUP ID所擁有(詳細見後文學習筆記)

test –h FILE

FILE存在並且是一個符號鏈接(詳細見後文學習筆記)

test –k FILE

FILE存在並且設置了sticky bit set(詳細見後文學習筆記)

test –L FILE

FILE存在並且是一個符號鏈接

test –O FILE

FILE存在並且由一個有效的USER ID所擁有

test –p FILE

FILE存在並且是一個命名管道(命名管道見後文學習筆記)

test –r FILE

FILE存在並且授予了可讀的許可權

test –s FILE

FILE存在並且size大於0

test –S FILE

FILE存在並且是一個socket

test –t FD

文件的描述符FD在終端打開

test –u FILE

FILE存在並且SUID已經被設置

test –w FILE

FILE存在並且授予了寫操作許可權

test –x FILE

FILE存在並且授予了可執行的許可權

----------------------------------------------------------------------------------------------------------------------------------------------------

expr

expr是linux的手工命令行計數器,它可以幫助我們完成一些基本的表達式值運算。同時它也是一個字元串處理工具

(1) 整數運算

$expr ARG1 | ARG2

$expr ARG1 & ARG2

$expr ARG1 < ARG2

$expr ARG1 <= ARG2

$expr ARG1 = ARG2

$expr ARG1 != ARG2

$expr ARG1 >= ARG2

$expr ARG1 > ARG2

$expr ARG1 + ARG2

$expr ARG1 – ARG2

$expr ARG1 * ARG2

使用乘法時,需要使用反斜杠進行轉義

$expr ARG1 % ARG2

(2) 字元串操作

$expr length 「xxx」 //計算字元串長度

$expr substr 「this is a」pos length //從第pos位開始截取length長度的子串

$expr index 「tesr」e //獲取e在主串中首次出現的位置

(3) 增量計數

例子

loop=3

loop=`expr $loop + 1`

echo $loop

結果是4,在第二行代碼中,使用反引號,shell會將反引號中的內容作為一個系統命令,這樣一來,就好像我們在命令行內輸入了expr $loop + 1然後這個命令的返回結果被賦值到loop。

(4) 模式匹配(按照正則表達式模式匹配串)

通過指定冒號選項計算字元串中字元數。.*意即任何字元重復0次或多次。

> VALUE=account.doc

> expr $VALUE : 』.*』

8

在expr中可以使用字元串匹配操作,這里使用模式抽取.doc文件附屬名。

$expr $VALUE : 『\(.*\).doc』

accounts

(5) 其他

+ TOKEN

將TOKEN解釋為串,不管它是一個關鍵字或者一個操作符

延伸知識:

引號的作用

1 雙引號(「」)

1)使用」」可引用除字元$(美元符號)、`(反引號)、\(反斜線)外的任意字元或字元串。雙引號不會阻止shell對這三個字元做特殊處理(標示變數名、命令替換、反斜線轉義)。

Eg:name=gezn; echo 「User name:$name」//將列印User name :gezn

Echo 「The date is:`date +date-%d-%m-%Y`」//將列印The date is: 03-05-2009

Echo –e 「$USER\t$UID」 //將列印gezn 500

2)如果要查新包含空格的字元串經常用到雙引號

2 單引號(』』)

1) 如果用單引號把字元串括起來,則dayi9nhao內字元串中的任何特殊字元的特殊含義均被屏蔽。

2) 舉例:echo –e 『$USER\t$UID』//將列印$USER $UID(沒有屏蔽\t,是因為選項「-e」的緣故)

echo 『USER\t$UID』 //將列印$USER\t$UID

3 反引號(``)

1) shell將反引號中的內容作為一個系統命令,並執行其內容。使用這種方法可以替換輸出為一個變數

2) 舉例:a=`date + date-%d-%m-%Y` //將列印The date is: 03-05-2009

4.反斜線(\)

1)如果下一個字元有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義。

2)下屬字元包含有特殊含義:& * + $ ` 「 | ?

3) 在列印字元串時要加入八進制字元(ASCII相應字元)時,必須在前面加反斜線,否則shell作普通數字處。

舉例: bj=Beijing; echo 」variable\$bj=$bj」//將列印variable $bj = beijing

------------------------------------------------------------------------------------------------------------------------------------------------

Shell特殊變數

在Shell中,預先定義了幾個有特殊含義的Shell變數,它們的值只能由Shell根據實際情況進行賦值,而不能通過用戶重新設置。shell的特殊變數包括它的位置和一些系統變數.

(一)常用位置變數:

$# 命令行上實際參數的個數,但不包含Shell腳本名。
$? 上一條命令執行後的返回值(也稱作 「退出碼」)。它是一個十進制數。多數Shell命令執行成功時,則返回值為0;如果執行失敗,則返回非0值。
$$ 當前進程的進程號。
$! 上一個後台命令對應的進程號,這是一個由1~5位數字構成的數字串。
$- 由當前Shell設置的執行標志名組成的字元串。例如:
set -xv 這個命令行給Shell設置了標志-x和-v(用於跟蹤輸出)。
$* 表示在命令行中實際給出的所有實參字元串,它並不僅限於9個實參。
$@ 它與$*基本功能相同,但是使用時加引號,並在引號中返回每個參數
$0 腳本名稱
$1..$9 第N個參數

下面的aaa bbb 為變數名

${aaa:-bbb} 如果$aaa為空或未定義,則取值$bbb.否則取值$aaa

${aaa:+bbb} 如果$aaa非空,則取值$bbb,否則取值為空

${aaa:=bbb} 如果$aaa非空,則取值$aaa,否則取值$bbb而且賦值(aaa=bbb)

${aaa:3} 如果aaa=abcdefg,則${aaa:3}的值為:defg ,相當於substr,計數從0開始

${aaa:3:2} 如上; ${aaa:3:2}取值為: de.相當於substr

${#aaa} 字元串$aaa的長度.

(二)常用系統變數:
$HOME 用戶的主目錄
$USER 用戶名稱
$GROUP 用戶所屬組名
$PATH 默認的搜索路徑
$HOSTNAME 主機名稱
$TZ 時區
$MAIL 存放郵件的路徑名

練手:

#!/bin/bash

echo $0

echo $*

echo $@

echo $#

echo $$

echo $_

在terminal窗口中執行:

./test.sh -a -b –c /home

./test.sh

-a -b -c /home

-a -b -c /home

4

3250

/home

區別$*和$@編寫如下test.sh腳本:

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs "$*"

testargs "$@"

unset -f testargs

在terminal窗口中執行:

./test.sh -a -b /home

1 args //很明顯就一個嘛,傳入的是$*這個串,不是解釋後的參數

3 args //$@必須和引號搭配,所以結果正確

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs $*

testargs $@

unset -f testargs

再次執行有:

./test.sh -a -b /home

3 args

3 args

作者:Aga.J
出處:http://www.cnblogs.com/aga-j

㈡ 網站訪客計數器怎麼做

訪客計數器是讓 Web 訪客知道該網頁或者網站的人氣指數最直接的方法。尤其是想利用網頁賺錢的人,訪客人數是找廣告商最好的說詞。當然可以將網站來訪人數寫成統計報表,但總是感覺直接看到比較真實,到底眼見為憑。
訪客計數器的流程如下 :
第一位使用者瀏覽某頁。
伺服器程式從資料庫或檔案中讀取該頁被瀏覽次數。
將次數加一儲存,並將它送回第兄差一位使用者。
第二位使用者瀏派棗覽某頁。
伺服器程式從資料庫或檔案中讀取該頁被瀏覽次數。
將次數再加一儲存,並將它送回第二位使用者。
所以記數器的原理是很簡單的,但是你要是想做一個又全面,又美觀的記數器就要花點點時塵塵拆間了。
但是你可以從最簡單的做起。

㈢ Linux編寫一個Shell腳本

#!/bin/sh

#定義一個變數i並賦初值0;
i=0
#定義一個while循環結構,條件表達式為判斷i值是否小於9,i為其計數器;
while test $i -lt 9
do
# 在循環結構內分別是三個if分支結構,分別判斷i=0、i=1和i>1的情況;
# 如果i=0,輸出i,並給 賦值( 用變數n代替);
if test $i -lt 1;then
n=$i
echo $n
#如果i=1,輸出i,並給 賦值( 用變數m代替);
elif test $i -eq 1;then
m=$i
echo $m
#如果i>=1,計算m+n(即 + )的值賦給 ( 用變數v代替),輸出v,
elif test $i -gt 1;then
v=`expr $m + $n`
echo $v
fi
i=`expr $i + 1`
done

㈣ 如何使用Bash Shell腳本進行功能測試

在本文中,Angel Rivera 將說明如何運用 Bash shell 腳本通過行命令來執行 Linux 應用程序的功能測試。由於此腳本依賴於命令行的返回碼,因而您不能將這種方法運用於 GUI 應用程序 功能測試是開發周期的一個階段,在這個階段中將測試軟體應用程序以確保軟體的函數如預期的那樣,同時能正確處理代碼中錯誤。此項工作通常在單個模塊的單元測試結束之後,在負載/重壓條件下整個產品的系統測試之前進行的。 市場上有許多測試工具提供了有助於功能測試的功能。然而,首先要獲取它們,然後再安裝、配置,這將佔用您寶貴的時間和精力。Bash 可以幫您免去這些煩瑣的事從而可以加快測試的進程。 使用Bash shell 腳本進行功能測試的優點在於: Bash shell 腳本已經在 Linux 系統中安裝和配置好了。不必再花時間准備它。 可以使用由 Linux 提供的文本編輯器如 vi 創建和修改 Bash shell 腳本。不需要再為創建測試程序而獲取專門的工具。 如果已經知道了如何開發 Bourne 或 Korn shell 腳本,那對於如何運用 Bash shell 腳本已經足夠了。對您來說,學習曲線已不存在了。 Bash shell 提供了大量的編程構造用於開發從非常簡單到中等復雜的腳本。 將腳本從 Korn 移植到 Bash 時的建議 如果已有現成的 Korn shell 腳本,而想要將它們移植到 Bash,就需要考慮下列情況: Korn 的 "print" 命令在 Bash 中不能使用;而是改為使用 "echo" 命令。 需要將腳本的第一行: #!/usr/bin/ksh 修改成: #!/bin/bash 創建Bash shell 腳本進行功能測試 這些基本的步驟和建議適用於許多在 Linux 上運行的客戶機/伺服器應用程序。 記錄運行腳本的先決條件和主要步驟 將操作分成若干個邏輯組 基於一般方案制定執行步驟 在每個 shell 腳本中提供注釋和說明 做一個初始備份以創建基準線 檢查輸入參數和環境變數 嘗試提供 "usuage" 反饋 嘗試提供一個「安靜」的運行模式 當出現錯誤時,提供一個函數終止腳本 如可能,提供可以執行單個任務的函數 當顯示正在生成的輸出時,捕獲每個腳本的輸出 在每個腳本內,捕獲每個行命令的返回碼 計算失敗事務的次數 在輸出文件中,突出顯示錯誤消息,以便於標識 如有可能,「實時」生成文件 在執行腳本的過程中提供反饋 提供腳本執行的摘要 提供一個容易解釋的輸出文件 如有可能,提供清除腳本及返回基準線的方法 下面詳細講述了每一條建議以及用於說明問題的腳本。若要下載此腳本,請參閱本文後面的 參考資料部分。 1. 記錄運行腳本的先決條件和主要步驟 記錄,尤其是以有自述標題的單個文件(例如 "README-testing.txt")記錄功能測試的主要想法是很重要的,包括,如先決條件、伺服器和客戶機的設置、腳本遵循的整個(或詳細的)步驟、如何檢查腳本的成功/失敗、如何執行清除和重新啟動測試。 2. 將操作分成若干個邏輯組 如果僅僅執行數量非常少的操作,可以將它們全部放在一個簡單的 shell 腳本中。 但是,如果需要執行一些數量很多的操作,那最好是將它們分成若干個邏輯集合,例如將一些伺服器操作放在一個文件而將客戶機操作放在在另一個文件中。通過這種方法,劃分適當的顆粒度來執行測試和維護測試。 3. 基於一般方案制定執行步驟 一旦決定對操作進行分組,需要根據一般方案考慮執行操作的步驟。此想法是模擬實際生活中最終用戶的情形。作為一個總體原則,只需集中測試 80% 最常調用函數的 20% 用法即可。 例如,假設應用程序要求 3 個測試組以某個特定的順序排列。每個測試組可以放在一個帶有自我描述文件名(如果可能)的文件中,並用號碼來幫助識別每個文件的順序,例如: 1. fvt-setup-1: To perform initial setup. 2. fvt-server-2: To perform server commands. 3. fvt-client-3: To perform client commands. 4. fvt-cleanup: To cleanup the temporary files, in order to prepare for the repetition of the above test cases. 4. 在每個 shell 腳本中提供注釋和說明 在每個 shell 腳本的頭文件中提供相關的注釋和說明是一個良好的編碼習慣。這樣的話,當另一個測試者運行該腳本時,測試者就能清楚地了解每個腳本中測試的范圍、所有先決條件和警告。 下面是一個 Bash 腳本 "test-bucket-1" 的示例 。 #!/bin/bash # # Name: test-bucket-1 # # Purpose: # Performs the test-bucket number 1 for Proct X. # (Actually, this is a sample shell script, # which invokes some system commands # to illustrate how to construct a Bash script) # # Notes: # 1) The environment variable TEST_VAR must be set # (as an example). # 2) To invoke this shell script and redirect standard # output and standard error to a file (such as # test-bucket-1.out) do the following (the -s flag # is "silent mode" to avoid prompts to the user): # # ./test-bucket-1 -s 2>&1 | tee test-bucket-1.out # # Return codes: # 0 = All commands were successful # 1 = At least one command failed, see the output file # and search for the keyword "ERROR". # ######################################################## 5. 做一個初始備份以創建基準線 您可能需要多次執行功能測試。第一次運行它時,也許會找到腳本或進程中的一些錯誤。因而,為了避免因從頭重新創建伺服器環境而浪費大量時間 -- 特別是如果涉及到資料庫 -- 您在測試之前或許想做個備份。 在運行完功能測試之後,就可以從備份中恢復伺服器了,同時也為下一輪測試做好了准備。 6. 檢查輸入參數和環境變數 最好校驗一下輸入參數,並檢查環境變數是否設置正確。如果有問題,顯示問題的原因及其修復方法,然後終止腳本。 當測試者准備運行腳本,而此時如果沒有正確設置腳本所調用的環境變數,但由於發現及時,終止了腳本,那測試者會相當感謝。沒有人喜歡等待腳本執行了很久卻發現沒有正確設置變數。 # -------------------------------------------- # Main routine for performing the test bucket # -------------------------------------------- CALLER=`basename $0` # The Caller name SILENT="no" # User wants prompts let "errorCounter = 0" # ---------------------------------- # Handle keyword parameters (flags). # ---------------------------------- # For more sophisticated usage of getopt in Linux, # see the samples file: /usr/lib/getopt/parse.bash TEMP=`getopt hs $*` if [ $? != 0 ] then echo "$CALLER: Unknown flag(s)" usage fi # Note quotes around `$TEMP': they are essential! eval set -- "$TEMP" while true do case "$1" in -h) usage "HELP"; shift;; # Help requested -s) SILENT="yes"; shift;; # Prompt not needed --) shift ; break ;; *) echo "Internal error!" ; exit 1 ;; esac done # ------------------------------------------------ # The following environment variables must be set # ------------------------------------------------ if [ -z "$TEST_VAR" ] then echo "Environment variable TEST_VAR is not set." usage fi 關於此腳本的說明如下: 使用語句 CALLER=`basename $0` 可以得到正在運行的腳本名稱。這樣的話,無須在腳本中硬編碼腳本名稱。因此當復制腳本時,採用新派生的腳本可以減少工作量。 調用腳本時,語句 TEMP=`getopt hs $*` 用於得到輸入變數(例如 -h 代表幫助,-s 代表安靜模式)。 語句[ -z "$X" ] 和 echo "The environment variable X is not set." 以及 usage 都是用於檢測字元串是否為空 (-z),如果為空,隨後就執行 echo 語句以顯示未設置字元串並調用下面要討論的 "usage" 函數。 若腳本未使用標志,可以使用變數 "$#",它可以返回正在傳遞到腳本的變數數量。 7. 嘗試提供「usage」反饋 腳本中使用 "usage" 語句是個好主意,它用來說明如何使用腳本。 # ---------------------------- # Subroutine to echo the usage # ---------------------------- usage() { echo "USAGE: $CALLER [-h] [-s]" echo "WHERE: -h = help " echo " -s = silent (no prompts)" echo "PREREQUISITES:" echo "* The environment variable TEST_VAR must be set," echo "* such as: " echo " export TEST_VAR=1" echo "$CALLER: exiting now with rc=1." exit 1 } 調用腳本時,使用「-h」標志可以調用 "usage" 語句,如下所示: ./test-bucket-1 -h 8. 嘗試使用「安靜」的運行模式 您或許想讓腳本有兩種運行模式: 在"verbose" 模式(您也許想將此作為預設值)中提示用戶輸入值,或者只需按下 Enter 繼續運行。 在"silent" 模式中將不提示用戶輸入數據。 下列摘錄說明了在安靜模式下運用所調用標志 "-s" 來運行腳本: # ------------------------------------------------- # Everything seems OK, prompt for confirmation # ------------------------------------------------- if [ "$SILENT" = "yes" ] then RESPONSE="y" else echo "The $CALLER will be performed." echo "Do you wish to proceed [y or n]? " read RESPONSE # Wait for response [ -z "$RESPONSE" ] && RESPONSE="n" fi case "$RESPONSE" in [yY]|[yY][eE]|[yY][eE][sS]) ;; *) echo "$CALLER terminated with rc=1." exit 1 ;; esac 9. 當出現錯誤時,提供一個函數終止腳本 遇到嚴重錯誤時,提供一個中心函數以終止運行的腳本不失為一個好主意。此函數還可提供附加的說明,用於指導在此情況下應做些什麼: # ---------------------------------- # Subroutine to terminate abnormally # ---------------------------------- terminate() { echo "The execution of $CALLER was not successful." echo "$CALLER terminated, exiting now with rc=1." dateTest=`date` echo "End of testing at: $dateTest" echo "" exit 1 } 10. 如有可能,提供可以執行簡單任務的函數 例如,不使用許多很長的行命令,如: # -------------------------------------------------- echo "" echo "Creating Access lists..." # -------------------------------------------------- Access -create -component Development -login ted -authority plead -verbose if [ $? -ne 0 ] then echo "ERROR found in Access -create -component Development -login ted -authority plead" let "errorCounter = errorCounter + 1" fi Access -create -component Development -login pat -authority general -verbose if [ $? -ne 0 ] then echo "ERROR found in Access -create -component Development -login pat -authority general" let "errorCounter = errorCounter + 1" fi Access -create -component Development -login jim -authority general -verbose if [ $? -ne 0 ] then echo "ERROR found in Access -create -component Development -login jim -authority general" let "errorCounter = errorCounter + 1" fi ……而是創建一個如下所示的函數,此函數也可以處理返回碼,如果有必要,還可以增加錯誤計數器: CreateAccess() { Access -create -component $1 -login $2 -authority $3 -verbose if [ $? -ne 0 ] then echo "ERROR found in Access -create -component $1 -login $2 -authority $3" let "errorCounter = errorCounter + 1" fi } ……然後,以易讀和易擴展的方式調用此函數: # ------------------------------------------- echo "" echo "Creating Access lists..." # ------------------------------------------- CreateAccess Development ted projectlead CreateAccess Development pat general CreateAccess Development jim general 11. 當顯示正在生成的輸出時,捕獲每個腳本的輸出 如果腳本不能自動地將輸出發送到文件的話,可以利用 Bash shell 的一些函數來捕獲所執行腳本的輸出,如: ./test-bucket-1 -s 2>&1 | tee test-bucket-1.out 讓我們來分析上面的命令: "2>&1" 命令: 使用"2>&1" 將標准錯誤重定向到標准輸出。字元串 "2>&1" 表明任何錯誤都應送到標准輸出,即 UNIX/Linux 下 2 的文件標識代表標准錯誤,而 1 的文件標識代表標准輸出。如果不用此字元串,那麼所捕捉到的僅僅是正確的信息,錯誤信息會被忽略。 管道"|" 和 "tee" 命令: UNIX/Linux 進程和簡單的管道概念很相似。既然這樣,可以做一個管道將期望腳本的輸出作為管道的輸入。下一個要決定的是如何處理管道所輸出的內容。在這種情況下,我們會將它捕獲到輸出文件中,在此示例中將之稱為 "test-bucket-1.out"。 但是,除了要捕獲到輸出結果外,我們還想監視腳本運行時產生的輸出。為達到此目的,我們連接允許兩件事同時進行的 "tee" (T- 形管道):將輸出結果放在文件中同時將輸出結果顯示在屏幕上。其管道類似於: process --> T ---> output file | V screen 如果 只 想捕獲輸出結果而不想在屏幕上看到輸出結果,那可以忽略多餘的管道: ./test-bucket-1 -s 2>&1 > test-bucket-1.out 假若這樣,相類似的管道如下: process --> output file 12. 在每個腳本內,捕獲每個行命令所返回碼 決定功能測試成功還是失敗的一種方法是計算已失敗行命令的數量,即返回碼不是 0。變數 "$?" 提供最近所調用命令的返回碼;在下面的示例中,它提供了執行 "ls" 命令的返回碼。 # ------------------------------------------- # The commands are called in a subroutine # so that return code can be # checked for possible errors. # ------------------------------------------- ListFile() { echo "ls -al $1" ls -al $1 if [ $? -ne 0 ] then echo "ERROR found in: ls -al $1" let "errorCounter = errorCounter + 1" fi } 13. 記錄失敗事務的次數 在功能測試中決定其成功或失敗的一個方法是計算返回值不是 0 的行命令數量。但是,從我個人的經驗而言,我習慣於在我的 Bash shell 腳本中僅使用字元串而不是整數。在我所參考的手冊中沒有清楚地說明如何使用整數,這就是我為什麼想在此就關於如何使用整數和計算錯誤(行命令失敗)數量的方面多展開講的原因: 首先,需要按如下方式對計數器變數進行初始化: let "errorCounter = 0" 然後,發出行命令並使用 $? 變數捕獲返回碼。如果返回碼不是 0,那麼計數器增加 1(見藍色粗體語句): ListFile() { echo "ls -al $1" ls -al $1 if [ $? -ne 0 ] then echo "ERROR found in: ls -al $1" let "errorCounter = errorCounter + 1" fi } 順便說一下,與其它變數一樣,可以使用 "echo" 顯示整數變數。 14. 在輸出文件中,為了容易標識,突出顯示錯誤消息 當遇到錯誤(或失敗的事務)時,除了錯誤計數器的數量會增加外,最好標識出此處有錯。較理想的做法是,字元串有一個如 ERROR 或與之相似的子串(見藍色粗體的語句),這個子串允許測試者很快地在輸出文件中查找到錯誤。此輸出文件可能很大,而且它對於迅速找到錯誤非常重要。 ListFile() { echo "ls -al $1" ls -al $1 if [ $? -ne 0 ] then echo "ERROR found in: ls -al $1" let "errorCounter = errorCounter + 1" fi } 15. 如有可能,「實時」生成文件 在某些情況下,有必要處理應用程序使用的文件。可以使用現有文件,也可以在腳本中添加語句來創建文件。如果要使用的文件很長,那最好將其作為獨立的實體。如果文件很小而且內容簡單或不相關(重要的一點是文本文件而不考慮它的內容),那就可以決定「實時」創建這些臨時文件。 下面幾行代碼顯示如何「實時」創建臨時文件: cd $HOME/fvt echo "Creating file softtar.c" echo "Subject: This is softtar.c" > softtar.c echo "This is line 2 of the file" >> softtar.c 第一個 echo 語句使用單個的 > 強行創建新文件。第二個 echo 語句使用兩個 >> 將數據附加到現有文件的後面。順便說一下,如果該文件不存在,那麼會創建一個文件。 16. 在執行腳本的過程中提供反饋 最好在腳本中包含 echo 語句以表明它執行的邏輯進展狀況。可以添加一些能迅速表明輸出目的的語句。 如果腳本要花費一些時間執行,那或許應在執行腳本的開始和結束的地方列印時間。這樣可以計算出所花費的時間。 在腳本樣本中,一些提供進展說明的 echo 語句如下所示: # -------------------------------------------- echo "Subject: Proct X, FVT testing" dateTest=`date` echo "Begin testing at: $dateTest" echo "" echo "Testcase: $CALLER" echo "" # -------------------------------------------- # -------------------------------------------- echo "" echo "Listing files..." # -------------------------------------------- # The following file should be listed: ListFile $HOME/.profile ... # -------------------------------------------- echo "" echo "Creating file 1" # -------------------------------------------- 17. 提供腳本執行的摘要 如果正在計算錯誤或失敗事務的次數,那最好表明是否有錯誤。此方法使得測試者在看到輸出文件的最後能迅速地辨認出是否存在錯誤。 在下面的腳本示例中,代碼語句提供了上述腳本的執行摘要: # -------------- # Exit # -------------- if [ $errorCounter -ne 0 ] then echo "" echo "*** $errorCounter ERRORS found ring ***" echo "*** the execution of this test case. ***" terminate else echo "" echo "*** Yeah! No errors were found ring ***" echo "*** the execution of this test case. Yeah! ***" fi echo "" echo "$CALLER complete." echo "" dateTest=`date` echo "End of testing at: $dateTest" echo "" exit 0 # end of file 18. 提供一個容易解釋的輸出文件 在腳本生成的實際輸出中提供一些關鍵信息是非常有用的。那樣,測試者就可以很容易地確定正在查看的文件是否與自己所做的相關以及它是否是當前產生的。附加的時間戳記對於是否是當前狀態是很重要的。摘要報告對於確定是否有錯誤也是很有幫助的;如果有錯誤,那麼測試者就必須搜索指定的關鍵字,例如 ERROR,並確認出個別失敗的事務。 以下是一段輸出文件樣本的片段: Subject: CMVC 2.3.1, FVT testing, Common, Part 1 Begin testing at: Tue Apr 18 12:50:55 EDT 2000 Database: DB2 Family: cmpc3db2 Testcase: fvt-common-1 Creating Users... User pat was created successfully. ... Well done! No errors were found ring the execution of this test case :) fvt-common-1 complete. End of testing at: Tue Apr 18 12:56:33 EDT 2000 當遇到錯誤時輸出文件最後部分的示例如下所示: ERROR found in Report -view DefectView *** 1 ERRORS found ring the execution of this test case. *** The populate action for the CMVC family was not successful. Recreating the family may be necessary before running fvt-client-3 again, that is, you must use 'rmdb', 'rmfamily', 'mkfamily' and 'mkdb -d', then issue: fvt-common-1 and optionally, fvt-server-2. fvt-client-3 terminated, exiting now with rc=1. End of testing at: Wed Jan 24 17:06:06 EST 2001 19. 如有可能,提供清除腳本及返回基準線的方法 測試腳本可以生成臨時文件;假若這樣,最好能讓腳本刪除所有臨時文件。這就會避免由於測試者也許沒有刪除所有臨時文件而引起的錯誤,更糟糕的是將所需要的文件當作臨時文件而刪除了。 運行功能測試的 Bash shell 腳本 本節描述如何運用 Bash shell 腳本進行功能測試。假設您已經執行了在前面部分中所述步驟。 設置必要的環境變數 根據需要在 .profile 中或手工指定下列環境變數。該變數用於說明在腳本中如何處理,所需環境變數的驗證必須在腳本執行前定義。 export TEST_VAR=1 將Bash shell 腳本復制到正確的目錄下 Bash shell 腳本和相關文件需要復制到要進行功能測試的用戶標識的目錄結構下。 登錄進某個帳戶。您應該在主目錄下。假設它是 /home/tester。 為測試案例創建目錄: mkdir fvt 復制Bash shell 腳本和相關文件。獲取壓縮文件(請參閱 參考資料 )並將其放在 $HOME 下。然後將其按下列方式解壓: unzip trfvtbash.zip 為了執行這個文件,更改文件的許可權: chmod u+x * 更改名稱以除去文件的後綴: mv test-bucket-1.bash test-bucket-1 運行腳本 執行下列步驟以運行腳本: 以測試者的用戶標識登錄 更改目錄至所復制腳本的位置: cd $HOME/fvt 從$HOME/fvt 運行腳本: ./test-bucket-1 -s 2>&1 | tee test-bucket-1.out 看一下輸出文件 "test-bucket-1.out" 的尾部並查看摘要報告的結論。 參考資料 您可以參閱本文在 developerWorks 全球站點上的 英文原文. 下載trfvtbash.zip,它包含本文所引用的樣本代碼和工具。該工具在以後有可能會更新。 嘗試用 Info-ZIP 軟體 解開該文件。由於該工具很常用,推薦您最好將解壓和壓縮工具的目錄放至 PATH 中,這樣該機器上的所有用戶都可以使用這個工具。 如何解壓該文件: 為了查看壓縮文件中的內容(實際上並沒有解包和解壓縮該文件),用: unzip -l trfvtbash.zip 命令。(T002)

熱點內容
華為平板怎麼儲存伺服器文件 發布:2025-02-06 12:49:21 瀏覽:479
php查詢結果數組 發布:2025-02-06 12:31:05 瀏覽:714
怎樣把照片壓縮打包 發布:2025-02-06 12:15:19 瀏覽:496
如何編譯java文件 發布:2025-02-06 12:05:58 瀏覽:237
九九乘法編程 發布:2025-02-06 12:05:05 瀏覽:519
台式機忘記開機密碼怎麼辦 發布:2025-02-06 11:58:01 瀏覽:871
android刷新按鈕 發布:2025-02-06 11:57:17 瀏覽:586
存儲過程有輸入參數和輸出參數 發布:2025-02-06 11:55:32 瀏覽:99
成績評選演算法 發布:2025-02-06 11:42:51 瀏覽:997
資料庫測試數據 發布:2025-02-06 11:31:05 瀏覽:824