Mac腳本入門

利用腳本測試程序

注:本文原本相關代碼可以在github gist找到,鏈接。如果想要文件形式的,我也上傳了一份到CSDN(不知道爲啥不能設置免積分下載),鏈接

前言:最近第一次作業,用殘酷的事實告訴了我測試的重要性。平時測試的時候,經常自己一個個情況測,每測一次都要重新輸入一次,費時費力效果差,所以下定決心學一下如何利用腳本進行簡單的程序測試,下面記錄一下一下用到的語法。

基本概念

以Mac爲例,新建一個腳本的基本流程爲

  • 新建腳本文件(後綴爲sh)touch script.sh
  • 打開並修改腳本文件open script.sh or emacs -nw script.sh
  • 修改腳本文件的權限chmod +x script.sh

注意事項:

  • 腳本是對空格敏感的,如a="Hello World"是合法的(聲明瞭一個變量),而a = "Hello World"是不合法的(等號兩邊多了一個空格)

輸出一段話

  • 利用echo向屏幕輸出一段話

向控制檯輸出Hello World \dArr

echo Hello World

變量

  • 利用$符號引用一個變量

利用一個變量,向控制檯輸出Hello World \dArr

a="Hello World"
echo $a

變量運算

修改一個變量的值(4種方法) \dArr

let i+=1;
((i++));
i=$[$i+1];
i=$(($i+1))

變量輸出格式控制

  • 可以通過printf來控制變量輸出的格式(如固定5位,多餘的補0)
  • 還可以將printf的結果保存到一個變量內方便使用
# printf in binary
printf "%05d\n" `echo "obase=2;$var" | bc`
# printf in decimal
printf "%05d" "$var")
# store the result of printf into a variable
var=$(printf "%05d\n" `echo "obase=2;$var" | bc`);
echo $var

從命令行讀入指令

  • 利用read指令從命令行讀入數據(保存在一個變量內)

從命令行讀入一個字符串,並原樣輸出 \dArr

read readAll
echo you enter $readAll

循環(for)

  • 注意for循環有兩層括號
  • 要打引號;

循環向控制檯輸出 30 個 Hello World \dArr

for((i=0;i<30;i++));
do
    echo Hello World $i
done

數組

  • 利用括號聲明一個數組,數組元素之間用空格隔開
  • 利用${list[index]}訪問數組元素

將整個數組輸出到命令行 \dArr

story_list=(hello0 hello1 hello2)

for((i=0;i<3;i++));
do
    echo ${story_list[$i]}
done

for i in {0..3};
do
    echo ${story_list[$i]}
done

條件判斷(if-else)

  • 條件判斷需要兩個中括號
  • thenfi來表示if-else的範圍

讀入一個字符,並作出判斷 \dArr

echo "do you...?(y/n):"
read readAll

if [[ $readAll = "y" ]]; then
    echo yes
else
    echo "no"
fi

讀取文件

  • cat指令:以文本形式輸出文件內容

逐行讀取並輸出文件內容 \dArr

cat filename.txt | while read line
do
    echo $line
done

寫入文件

  • 利用插入符>>寫入文件
  • 利用$FILE來指定某個文件

打開一個文件,寫入一個變量和一串字符\dArr

a="Hello world"
FILE="./filename.txt"
echo $a >> $FILE
echo "----------------------" >> $FILE

簡單的運行一個可執行程序

  • rand_story 是一個編譯好的可執行程序,story.txt,words.txt和3是這個程序接受的三個輸入參數

運行程序rand_story \dArr

./rand_story story.txt words.txt 3

將可執行程序的輸出寫入到文件內

  • 注意第一行用的是 ` 而不是單引號 ’

運行程序rand_story,並將程序輸出寫入到指定文件 \dArr

cmd=`./rand_story story.txt words.txt 3`
a=${cmd}
FILE="./output.txt"
echo "$a" >> $FILE

簡易版自動化測試腳本

  • 利用循環更改數字類參數
  • 利用循環 + 數組更改字符串類參數
  • 將所有結果寫入.txt文件
# file name
FILE="./output.txt"
# clear the file content
echo "" > $FILE
echo "-----------test start-----------" >> $FILE

# modify number parameter
for i in {0..30};
do
    echo =====testcase $i===== >> $FILE
    cmd=`./rand_story story.txt words.txt $i`
    a=${cmd}
    echo $a >> $FILE
done

story_list=(story.txt story1.txt story2.txt)

# modify string parameter
for i in {0..2};
do
    echo =====testcase $i===== >> $FILE
    cmd=`./rand_story ${story_list[$i]} words.txt 1`
    a=${cmd}
    echo $a >> $FILE
done
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章