1. 程式人生 > >測試工程師需要了解的shell變數知識

測試工程師需要了解的shell變數知識

歡迎訪問個人部落格

什麼是變數

  • 本地變數:手動定義的,在當前系統的某個環境下才能生效,作用範圍小

    • 普通變數:

      • 單引號:原字元輸出,變數名=‘變數值’
      ➜  shell name='tom'
      ➜  shell echo $name
      tom
      • 雙引號:變數名=“變數值”,看一下值當中有沒有對其他變數的引用,如果有就獲取變數值然後組合到一起輸出
      ➜  shell word="I am $name"
      ➜  shell echo $word
      I am tom
      • 直接命名不加任何引號:變數名=變數值
      ➜  shell age=33
      ➜  shell echo $age
      33
      • 習慣用法:數字不加引號,其他家雙引號
    • 命令變數:變數值是命令的變數,會將命令的執行結果賦值給變數

      • 變數名=`命令`,這是反引號
      ➜  shell files=`ll`
      ➜  shell echo $files
      total 8
      -rwxr-xr-x  1 zhouyajun  staff   228B Mar 26 21:58 itcast.sh
      drwx-wx--x  3 zhouyajun  staff    96B Oct 11 22:15 test
      • 變數名=$(命令)
      ➜  shell woshishui=$(whoami)
      ➜  shell echo $woshishui
      zhouyajun
      • 執行流程:執行命令,將命令執行後的結果複製給新的變數名

全域性變數: 手工加預設方式定義的作用範圍最大的變數

  • env 檢視所有的全域性變數
  • 宣告全域性變數
    • name=tom, 然後 export name,這就宣告為全域性變量了
    • export name=tom,直接宣告全域性變數

檢視、刪除變數

  • 檢視變數
    • "asd ${變數名}"
    • "${變數名}"
  • 刪除--unset 變數名

內建變數:bash命令中自帶的一些引數變數

  • 指令碼檔案

    • $0 獲取當前執行的shell指令碼檔名

      #! /bin/bash
      # yy複製,p貼上
      echo "獲取當前檔名:get_name"
      echo "獲取當前檔名:$0"
      
      ➜  shell /bin/bash get_name.sh
      獲取當前檔名:get_name
      獲取當前檔名:get_name.sh
    • $n 獲取當前執行的shell指令碼的第n個引數值,n=1..9,當n為0的時候表示指令碼的檔名,如果n大於9就要用大括號括起來${10}

    #! /bin/bash
    echo "獲取引數"
    echo "獲取命令列引數:$1"
    
    ➜  shell /bin/bash get_args.sh 1 2 3
    獲取引數
    獲取命令列引數:1
    • $# 獲取當前執行shell命令列中引數的總個數
    #! /bin/bash
    echo "獲取引數"
    echo "獲取命令列引數:$#"
    
    ➜  shell /bin/bash get_args.sh 1 2 3 d gf
    獲取引數
    獲取命令列引數:5
    • $? 獲取執行上一個指令的返回值(0為成功,非0為失敗)

      ➜  shell echo $?  這是上面指令執行結果
      0
      ➜  shell asdfas  這是一條錯誤指令
      zsh: command not found: asdfas
      ➜  shell echo $?
      127
  • 精確獲取 ${變數名:其實位置:擷取長度},

    • ${file:0:5} 從第一個字元開始,擷取5個字元
    • ${file:5:5} 從第6個字元開始擷取6個字元
    • ${file:0-6:5} 從倒數第6個字元開始,擷取之後的5個字元
    ➜  shell file=abcdefghijklmnopkrstuvwxyz
    ➜  shell echo $file
    abcdefghijklmnopkrstuvwxyz
    ➜  shell echo ${file:0:5}
    abcde
    ➜  shell echo ${file:5:5}
    fghij
    
    ➜  shell echo ${file:0-6:5}
    uvwxy
  • 預設值

    • 有條件生效 ${變數名:-預設值},如果變數沒有指向的內容就輸出預設值
    #! /bin/bash
    a="$1" # 獲取命令列第一個引數
    echo "引數的值是: ${a:-1}"  # 設定預設值1
    
    ➜  shell /bin/bash default_value.sh 55
    引數的值是: 55
    ➜  shell /bin/bash default_value.sh
    引數的值是: 1
    • 無條件生效 ${變數名+預設值} 如果是否有指向內容,都輸出預設值

      歡迎大家去 我的部落格 瞅瞅,裡面有更多關於測試實戰的內容哦!!