寫在最前,作為一名軟體測試人員,shell基礎也是必不可少的技能,就筆者遇到的工作場景中,在linux部署測試環境,檢視錯誤資訊,監控伺服器效能都會用到shell語句,此外,不管是dockerfile,或者是自動化指令碼都需要用到這塊的技術,這篇文章一方面也是梳理一下比較雜亂的技能點,另一方面也是留個檔,方面後面持續檢視學習。本文主要梳理shell基礎,詳見正文。
一、shell介紹
shell是系統的使用者介面,提供了使用者與核心進行互動操作的一種介面。實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到linux核心。它是一門弱型別的指令碼語言。
二、shell指令碼格式
shell指令碼是以.sh結尾的檔案,其中檔案的第一行內容為#!/bin/bash,第一行的內容指定了shell指令碼直譯器的路徑,而且這個指定路徑只能放在檔案的第一行。
#!/bin/bash
三、shell變數及引數傳遞
- 變數定義及使用
shell變數的名稱定義與其他變成語言一致,包括:
1. 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭
2. 中間不能有空格,可以使用下劃線,不能使用標點符號
3. 不能使用bash裡的關鍵字
這裡要特別注意的是:變數名和等號之間不能有空格,如下:
變數值輸出:echo $變數名
變數釋放:unset 變數
案例如下:
特殊變數定義:雙引號、單引號、反單引號
"" 雙引號括起來的變數:會將其中的變數轉變為實際值輸出
'' 單引號括起來的變數:輸入什麼就是什麼
`` 反單引號包含的內容:會作為shell命令執行,返回結果
樣例如下:
- 引數傳遞
輸入操作:read -p "提示資訊" 變數名
以檔案形式接收引數:
$1--->傳遞第一個引數
$n---->傳遞第n個引數
$0:顯示的是檔名稱
$@:顯示所有的引數
$#:顯示的引數的個數
樣例如下:
指令碼內容:
輸出內容:
- 重定向
>覆蓋,>>追加
案例如下:執行 >> 兩遍追加,輸入內容是追加的,如果是執行 > ,則會覆蓋刪除
四、shell邏輯判斷
- 分支結構
if分支
if...then...elif...then...else...fi分支,案例如下:
注意:[] 前後都需要有空格
case分支
第一行最後必須為in,每個執行語句以;;結束,最後以esac結束,如下:
補充:
邏輯運算子:
-a :且
-o :或
! : 否
比較運算子:
-eq:equal 相等
-ne:not equal 不相等
-ge:greater equal 大於等於
-gt:greater than 大於
-le:less equal 小於等於
-lt:less than 小於
字串比較:
== 相等
!= 不等
-z 判斷字串長度是否為0
-n 判斷字元床是否為空
測試檔案/目錄狀態 :
-d dir 判斷是否為目錄
-f file 判斷是否為檔案
-e file 判斷檔案或目錄是否存在
-w、-r 、-x 判斷檔案是否可寫,可讀、可執行
五、shell迴圈體
for迴圈
格式:
for 變數名 in 列表
do
語句
done
案例如下:
其中:命令: seq start size max,可以生成一個指定起始、結尾、步長的列表
while迴圈
格式:
while [ 條件 ]
do
執行語句
done
案例如下:
六、shell函式
定義:函式名(){}
案例如下: