測試工程師需要了解的shell變數知識
阿新 • • 發佈:2020-03-27
歡迎訪問個人部落格
什麼是變數
本地變數:手動定義的,在當前系統的某個環境下才能生效,作用範圍小
普通變數:
- 單引號:原字元輸出,變數名=‘變數值’
➜ 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
無條件生效 ${變數名+預設值} 如果是否有指向內容,都輸出預設值
歡迎大家去 我的部落格 瞅瞅,裡面有更多關於測試實戰的內容哦!!