shell基礎

silriver發表於2009-07-08
寫在最前,作為一名軟體測試人員,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函式

 
   定義:函式名(){}
   案例如下: