當前位置:首頁 » 編程軟體 » linux測試腳本

linux測試腳本

發布時間: 2023-01-11 00:43:25

A. linux shell 硬碟文件讀寫校驗測試腳本

讀寫失敗時dd的返回值分別是多少一直查不到,而如果這個沒法弄明白的話,校驗的對錯就沒什麼意義了(根本不知道是dd出的錯還是md5sum出的錯),算了,你將就一下吧,查到後改一下就好了。
#!
/bin/bash
infile="$1"
cycle=0
=0
err=0
if
[
"$#"
-ne
1
]
||
[
!
-f
"$1"
]
then
echo
"用法:test
<infile>"
exit
1;
fi
echo
-e
"<>警告<>:本測試程序對磁碟有較大損害,請您謹慎運行。"
echo
-e
"
按Crtl+C鍵終止測試"
echo
-e
"開始測試?(y/n)y:c"
while
read
-r
answer
</dev/tty
do
if
[
"$answer"
==
'n'
]
||
[
"$answer"
==
'N'
]
then
echo
"結果:$cycle
輪共
$
次復制,讀/寫錯誤
$err
次"
rm
-f
${infile}_*
exit
0
fi
let
cycle++
echo
"=========================

$cycle

==========================="
rm
-f
"$infile"_*
sync
let
++
#方便起見,選第一分區爆之
while
[
"$(df
-k|sed
-n
'3q;2s/
*/
/g;2p'|cut
-d
'
'
-f
4)"
-gt
1
]
do
echo
"===========
副本
$
==========="
outfile="${infile}_${}"
dd
if="$infile"
of="$outfile"
#關於dd命令如果遭遇讀失敗或寫失敗的返回碼無據可查,但肯定不是0,
另一種實現方法是用md5sum
--status檢驗,但這種方法看起來多此一舉反而導致讀寫比變>為3:1
if
[
"$?"
-ne
0
]
then
let
err++
fi
let
++
echo
&&
sync
trap
"echo
'結果:'
$cycle
'輪共'
$
'次復制,讀/寫錯誤'
$err
'次'
&&
rm
-f
${infile}_*
&&
exit;"
1
2
3
15
done
echo
-e
"磁碟已滿,刪除測試文件後繼續?(y/n)y:c"
done

B. 以下linux測試帶寬腳本內容是保存在linux系統裡面那個文件

首先確認這個腳本是通過什麼用戶執行的,假設是root
進入root賬號
crontab -l 列出所有root用戶的cron job,然後你就可以知道哪個文件是這個腳本的位置了

C. Linux expect

expect:expect是Unix系統中用來進行自動化控制和測試的腳本工具,常用於實現互動式任務的自動化。使用命令」dnf install expect -y」進行安裝。腳本文件聲明為」#!/usr/bin/expect」。

expect常用命令如下:

1.spawn+交互命令(如spawn ssh [email protected]):」spawn」是expect的初始命令,用於啟動一個新的交互進程,之後所有的操作都會在這個進程中進行。

2.set:定義變數/為變數賦值。使用語法:set 變數名 值。

3.puts:將變數值/字元串定向到本地標准輸出文件(即定位到屏幕)。使用語法:puts 「字元串/$變數名」

4.send_user:作用和使用方法類似於」puts」,區別在於」puts」會在輸出內容的結尾自動追加一個換行符,而」send_user」不會。

5.send:向交互進程發送信息/命令(字元串和一些特殊符號,\r—回車,\n—換行,\t—製表符)。使用語法:send 「信息/命令[\r]」。

6.[lindex $argv 數字]:表示外部傳遞參數的值,數字是n,就表示第n-1個參數。註:$argc表示外部傳遞參數的個數,也是一個值。

7.expect+字元串+{ 命令 }:將字元串與交換進程接收到的信息進行匹配。如果匹配成功(字元串是交換進程接收到的信息的一部分),執行包含在」{}」中的命令;如果匹配失敗,不執行包含在」{}」中的命令。該命令有三種使用方法:

第一種:單分支模式

①expect 字元串 { 命令 }

解釋:如果字元串與交換進程接收到的信息匹配成功,執行包含在」{}」中的命令,並結束該expect命令;如果字元串與交換進程接收到的信息匹配失敗,timeout秒後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

②expect {

字元串{ 命令 }

timeout { 命令 }

}

解釋:如果字元串與交換進程接收到的信息匹配成功,執行包含在」{}」中的命令,並結束該expect命令;如果字元串與交換進程接收到的信息匹配失敗,timeout秒後執行包含在」{}」中的命令,之後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

第二種:多分支模式

①expect {

字元串1 { 命令 }

字元串2 { 命令 }

}

解釋:如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並結束該expect命令;如果字元串1與交換進程接收到的信息匹配失敗、字元串2與交換進程接收到的信息匹配成功,執行包含在」{}」中的命令,並結束該expect命令;如果字元串1、字元串2皆與交換進程接收到的信息匹配失敗,timeout秒後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

②expect {

字元串1 { 命令 }

字元串2 { 命令 }

timeout { 命令 }

}

解釋:如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並結束該expect命令;如果字元串1與交換進程接收到的信息匹配失敗、字元串2與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並結束該expect命令;如果字元串1、字元串2皆與交換進程接收到的信息匹配失敗,timeout秒後執行包含在」{}」中的命令,之後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

第三種:循環多分支模式(註:exp_continue命令只能出現在expect命令的匹配語句中,執行到exp_continue命令時,腳本會跳出當前expect命令,並重新執行該expect命令,直到expect命令通過不包含exp_continue命令的匹配語句結束、或expect命令匹配超時結束。)

①expect {

字元串1 { 命令; exp_continue }

字元串2 { 命令 }

}

解釋:如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並重新執行該expect命令;如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並重新執行該expect命令...;如果字元串1與交換進程接收到的信息匹配失敗、字元串2與交換進程接收到的信息匹配成功,執行包含在」{}」中的命令,並結束該expect命令;如果字元串1、字元串2皆與交換進程接收到的信息匹配失敗,timeout秒後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

②expect {

字元串1 { 命令; exp_continue }

字元串2 { 命令 }

timeout { 命令 }

}

解釋:如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並重新執行該expect命令;如果字元串1與交換進程接收到的信息匹配成功,執行執行包含在」{}」中的命令,並重新執行該expect命令...;如果字元串1與交換進程接收到的信息匹配失敗、字元串2與交換進程接收到的信息匹配成功,執行包含在」{}」中的命令,並結束該expect命令;如果字元串1、字元串2皆與交換進程接收到的信息匹配失敗,timeout秒後執行包含在」{}」中的命令,之後結束該expect命令。(註:腳本執行到expect命令時,計時器就開始計時,並會在計時器超時前不斷對交換進程接收到的信息進行掃描,嘗試字元串與信息的匹配。)

8.timeout:timeout是expect中的一個關鍵字變數,用於控制expect命令的超時時間。需要注意的是,這個超時時間針對於整個expect命令,而不是針對於expect命令中的某條匹配語句。也就是說,只有expect命令中所有匹配語句都匹配失敗後,才會開始計算超時時間。timeout變數值預設為10(秒),我們可以通過」set timeout=值」的方式為其重新賦值,作用范圍:本次賦值到下一次賦值間的所有expect命令。註:如果需要為timeout變數重新賦值,應在expect命令之外進行。

9.expect eof:該命令的作用是結束spawn交互進程,將命令行切回至運行腳本的主機(即從遠端伺服器登出)。

10.interact:預設情況下,expect腳本執行完畢後會自動從遠端伺服器登出(即便沒有顯式地執行」expect eof」命令)。使用interact命令後,expect腳本執行完畢會繼續保持當前狀態,並將控制權移交給用戶。

11.exit:結束該腳本。

expect中的if語句:

if { 條件表達式 } {

命令

}

if { 條件表達式 } {

命令

} else {

命令

}

expect中的while語句:

while { 條件表達式 } {

命令

}

expect中的for語句:

for { set i 1 } { $i <=10 } { incr i } {

命令

}

incr變數名 步長   ——變數自增

incr 變數名 -步長    ——變數自減

數學運算需使用let、expr等工具

D. 使用Linux腳本用wegt命令測試鏈接是否有效

linux測試網路是否連通ping、telnet命令 閱讀數 930 ...wgetip:port連接存在的埠連接不存在的埠二

E. linux中一鍵測試腳本bench.sh怎麼停止

"首先腳本需要有執行許可權:chmod u x file.sh;執行腳本有三種方法:1. ./file.sh:特點:開啟bash子進程來執行,也就是開啟額外的進程來進行,不影響原進程的變數

F. Linux中測試腳本寫好運行後提示語法錯誤咋回事

#!/bin/bash

read-p"pleaseenteryourscore(0-100)":a
if[$a-ge86]&&[$a-le100];then
echo"$aisgreat"
elif[$a-ge60]&&[$a-le85];then
echo"$aispass"
else
echo"$aisfail"
fi

G. 如何測試linux crontab的腳本是否有執行

  1. 腳本寫日誌

  2. 查看crontab的系統日誌

H. 如何編寫linux下執行測試軟體命令按時間間隔的腳本

編寫腳本fio.sh,內容:
#/bin/sh

fio -filename=/dev/sdl -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=8k -size=200G -numjobs=30 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=32k -size=200G -numjobs=30 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=32k -size=200G -numjobs=1 -runtime=60 -group_reporting -name=mytest
sleep 60
fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=32k -size=200G -numjobs=1 -runtime=60 -group_reporting -name=mytest

執行腳本:
bash ./fio.sh > fio.log 2>&1

I. Linux Shell 腳本編程最佳實踐

IT路邊社

前言

與其它的編碼規范一樣,這里所討論的不僅僅是編碼格式美不美觀的問題, 同時也討論一些約定及編碼標准。這份文檔主要側重於我們所普遍遵循的規則,對於那些不是明確強制要求的,我們盡量避免提供意見。

編碼規范對於程序員而言尤為重要,有以下幾個原因:

本文檔中的准則致力於最大限度達到以下原則:

盡管本文檔涵蓋了許多基礎知識,但應注意的是,沒有編碼規范可以為我們回答所有問題,開發人員始終需要再編寫完代碼後,對上述原則做出正確的判斷。

:未明確指明的則默認為必須(Mandatory)

主要參考如下文檔:

僅建議Shell用作相對簡單的實用工具或者包裝腳本。因此單個shell腳本內容不宜太過復雜。

在選擇何時使用shell腳本時時應遵循以下原則:

可執行文件不建議有擴展名,庫文件必須使用 .sh 作為擴展名,且應是不可執行的。

執行一個程序時,無需知道其編寫語言,且shell腳本並不要求具有擴展名,所以更傾向可執行文件沒有擴展名。

而庫文件知道其編寫語言十分重要,使用 .sh 作為特定語言後綴的擴展名,可以和其他語言編寫的庫文件加以區分。

文件名要求全部小寫, 可以包含下劃線 _ 或連字元 - , 建議可執行文件使用連字元,庫文件使用下劃線。

正例:

反例:

源文件編碼格式為UTF-8。避免不同操作系統對文件換行處理的方式不同,一律使用 LF 。

每行最多不超過120個字元。每行代碼最大長度限制的根本原因是過長的行會導致閱讀障礙,使得縮進失效。

除了以下兩種情況例外:

如出現長度必須超過120個字元的字元串,應盡量使用here document或者嵌入的換行符等合適的方法使其變短。

示例:

除了在行結束使用換行符,空格是源文件中唯一允許出現的空白字元。

對從來沒有用到的或者被注釋的方法、變數等要堅決從代碼中清理出去,避免過多垃圾造成干擾。

Bash 是唯一被允許使用的可執行腳本shell。

可執行文件必須以 #!/bin/bash 開始。請使用 set 來設置shell的選項,使得用 bash echo "Process $: Done making $$$."
# 示例7:命令參數及路徑不需要引號 grep -li Hugo /dev/ "$1"
# 示例8:常規變數用雙引號,ccs可能為空的特殊情況可不用引號 git send-email --to "${reviewers}" ${ccs:+"--cc" "${ccs}"}
# 示例9:正則用單引號,$1可能為空的特殊情況可不用引號 grep -cP '([Ss]pecial||?characters*) ${1:+"$1"}
# 示例10:位置參數傳遞推薦帶引號的"$@",所有參數作為單字元串傳遞用帶引號的"$*" # content of t.sh func_t { echo num: $# echo args: 1:$1 2:$2 3:$3 }
func_t "$@" func_t "$*" # 當執行 ./t.sh a b c 時輸出如下: num: 3 args: 1:a 2:b 3:c num: 1 args: 1:a b c 2: 3:

使用 $(command) 而不是反引號。

因反引號如果要嵌套則要求用反斜杠轉義內部的反引號。而 $(command) 形式的嵌套無需轉義,且可讀性更高。

正例:

反例:

條件測試

使用 [[ ... ]] ,而不是 [ , test , 和 /usr/bin/[ 。

因為在 [[ 和 ]] 之間不會出現路徑擴展或單詞切分,所以使用 [[ ... ]] 能夠減少犯錯。且 [[ ... ]] 支持正則表達式匹配,而 [ ... ] 不支持。參考以下示例:

盡可能使用變數引用,而非字元串過濾。

Bash可以很好的處理空字元串測試,請使用空/非空字元串測試方法,而不是過濾字元,讓代碼具有更高的可讀性。正例:

反例:

正例:

反例:

正例:

反例:

文件名擴展

當進行文件名的通配符擴展時,請指定明確的路徑。

當目錄中有特殊文件名如以 - 開頭的文件時,使用帶路徑的擴展通配符 ./* 比不帶路徑的 * 要安全很多。

應該避免使用eval。

Eval在用於分配變數時會修改輸入內容,但設置變數的同時並不能檢查這些變數是什麼。反例:

請使用進程替換或者for循環,而不是通過管道連接while循環。

這是因為在管道之後的while循環中,命令是在一個子shell中運行的,因此對變數的修改是不能傳遞給父shell的。

這種管道連接while循環中的隱式子shell使得bug定位非常困難。反例:

如果你確定輸入中不包含空格或者其他特殊符號(通常不是來自用戶輸入),則可以用for循環代替。例如:

使用進程替換可實現重定向輸出,但是請將命令放入顯式子 shell,而非 while 循環創建的隱式子 shell。例如:

總是檢查返回值,且提供有用的返回值。

對於非管道命令,使用 $? 或直接通過 if 語句來檢查以保持其簡潔。

例如:

當內建命令可以完成相同的任務時,在shell內建命令和調用外部命令之間,應盡量選擇內建命令。

因內建命令相比外部命令而言會產生更少的依賴,且多數情況調用內建命令比調用外部命令可以獲得更好的性能(通常外部命令會產生額外的進程開銷)。

正例:

反例:

載入外部庫文件不建議用使用.,建議使用source,已提升可閱讀性。正例:

反例:

除非必要情況,盡量使用單個命令及其參數組合來完成一項任務,而非多個命令加上管道的不必要組合。常見的不建議的用法例如:cat和grep連用過濾字元串; cat和wc連用統計行數; grep和wc連用統計行數等。

正例:

除特殊情況外,幾乎所有函數都不應該使用exit直接退出腳本,而應該使用return進行返回,以便後續邏輯中可以對錯誤進行處理。正例:

反例:

推薦以下工具幫助我們進行代碼的規范:

原文鏈接:http://itxx00.github.io/blog/2020/01/03/shell-standards/

獲取更多的面試題、腳本等運維資料點擊: 運維知識社區 獲取

腳本之---簡訊轟炸機

腳本之---QQ微信轟炸機

ansible---一鍵搭建redis5.0.5集群

elk7.9真集群docker部署文檔

全球最全loki部署及配置文檔

最強安全加固腳本2.0

一鍵設置iptbales腳本

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:582
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1013
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:114
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:713