shell變量簡介shell
變量是任何一種編程語言都必不可少的組成部分,變量用來存放各類數據。腳本語言在定義變量時一般不須要指明類型,直接賦值就能夠,shell變量也循環這個規則。express
在bash shell中,每個變量的值都是字符串,不管你給變量賦值是有沒有使用引導,值都會以字符串的形式儲存。編程
這意味着,bash shell在默認狀況系不會區分變量類型,即便你將整數和小數賦值給變量,他們也會被視爲字符串,這一點和大部分的編程語言不通。數組
定義變量bash
shell支持如下三種定義變量的方式less
variable=value variable='value' variable="value"
variable是變量名,value是賦給變量的值。編程語言
注意:賦值號的周圍不能有空格,這與其它大部分編程語言不同函數
Shell 變量的命名規範和大部分編程語言都同樣:工具
使用變量測試
使用一個定義過得變量,只要在變量名前加美圓符號$便可
author="ken" echo $author echo ${author}
變量名外面的花括號{}是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界
例如
skill="Java" echo "I am good at ${skill}Script"
若是不是skill變量加花括號,寫成echo "I am good at $skillScript",解釋器就會把 $skillScript 當成一個變量(其值爲空),代碼執行結果就不是咱們指望的樣子了。推薦給全部變量加上花括號{ },這是個良好的編程習慣。
系統變量
在命令行提示符直接執行 env、set 查看系統或環境變量。env 顯示用戶環境變量,set 顯示 Shell 預先定義好的變量以及用戶變量。能夠經過 export 導出成用戶變量。一些寫 Shell 腳本時經常使用的系統變量
$SHELL | 默認shell |
$HOME | 當前用戶家目錄 |
$IFS | 內部字段分隔符 |
$LANG | 默認語言 |
$PATH | 默承認執行程序路徑 |
$PWD | 當前目錄 |
$UID | 當前用戶ID |
$USER | 當前用戶 |
$HISTSIZE | 歷史命令大小,可經過HISTTIMEFORMAT變量設置明命令執行時間 |
$RANDOM | 隨機生成一個0到32767的整數 |
$HOSTNAME | 主機名 |
普通變量定義:VAR=value
臨時環境變量定義:export VAR=value
變量引用:$VAR
區別:shell進程的環境變量做用域是shell進程,當export導入系統變量時,則做用域是shell進程機器shell子進程,另開shell無效
修改變量的值
已定義的變量,能夠從新賦值
url="http://www.baidu.com" echo ${url} url="http://www.sina.com" echo ${url}
第二次對變量賦值時不能再變量前加$,只有在使用變量時才能加$
單引號、雙引號、反引號
單引號:所見即所得
雙引號:解析變量和命令
反引號:執行命令。與$()做用相同
刪除變量
使用unset命令能夠刪除變量
unset variable_name
變量刪除後不能再次使用,unset命令不能刪除只讀變量
[root@ken ~]# name=ken [root@ken ~]# readonly name [root@ken ~]# echo $name ken [root@ken ~]# unset name -bash: unset: name: cannot unset: readonly variable
變量類型
①局部變量:局部變量在腳本或者命令中定義,盡在當前shell實例中有效,其它shell啓動的程序不能訪問局部變量
②環境變量:全部的程序,包括shell啓動的程序,都能訪問環境變量,有些程序須要環境變量來保證其正常運行。必要的時候shell腳本也能夠定義環境變量
③shell變量:shell變量是由shell程序設置的特殊變量shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
特殊變量列表(shell變量)
變量 | 含義 |
$0 | 當前腳本的文件名 |
$n | 傳遞給腳本或者函數的參數,n是一個數字,表示第幾個參數 |
$# | 傳遞給腳本或者函數的參數個數 |
$* | 傳遞給腳本或函數的全部參數 |
$? | 上個命令的退出狀態,或者函數的返回值 |
$$ | 當前shell進程ID。對於shell腳本,就是這些腳本所在的進程ID |
退出狀態
$?能夠獲取上一個命令的退出狀態,所謂的退出狀態,就是上一個命令執行後的返回結果
退出狀態是一個數字,通常狀況系,大部分命令執行成功會返回0,失敗會返回1
不過,也會有一些命令返回其餘值,表示不一樣類型的錯誤
條件表達式
表達式 | 實例 |
[ expression ] | [ 1 -eq 1 ] |
[[ expression ]] | [[ 1 -eq 1 ]] |
test expression | test 1 -eq 1 ,等同於[] |
注意:括號中的表達式先後都要有空格,不然會報錯
整數比較符
比較符 | 描述 | 實例 |
-eq equal | 等於 | [ 1 -eq 1 ] 爲true |
-ne not equal | 不等於 | [ 1 -ne 1 ] 爲false |
-gt greate than | 大於 | [ 1 -gt 1 ] 爲false |
-lt lesser than | 小於 | [ 1 -lt 1 ] 爲false |
-ge greate or equal | 大於或者等於 | [ 1 -ge 1 ] 爲true |
-le lesser or equal | 小於或者等於 | [ 1 -le 1 ] 爲true |
字符串比較符
運算符 | 描述 | 實例 |
== | 等於 | [ "a" == "a" ] 爲true |
!= | 不等於 | [ "a" != "a" ] 爲false |
-n | 字符串長度不等於0爲真 | VAR1=1;VAR2="" [ -n "$VAR1" ]爲 true [ -n "$VAR2" ]爲 false |
-z | 字符串長度等於0爲真 | VAR1=1;VAR2="" [ -z "$VAR1" ]爲false [ -z "$VAR2" ]爲 true |
文件測試
測試符 |
描述 | 實例 |
-e |
文件或者目錄存在爲真 | [ -e path ] path 存在爲 true |
-f |
文件存在爲真 | [ -f file_path ] 文件存在爲 true |
-d |
目錄存在爲真 | [ -d dir_path ] 目錄存在爲 true |
-r |
有讀權限爲真 | [ -r file_path ]file_path有讀權限爲真 |
-w |
有寫權限爲真 | [ -r file_path ]file_path有寫權限爲真 |
-x |
有執行權限爲真 | [ -r file_path ]file_path有執行權限爲真 |
布爾運算符
運算符 |
描述 | 實例 |
! |
非關係,條件結果取反 |
[ ! 1 -eq 2 ]爲true |
-a |
和關係,在[]表達式中使用 |
[ 1 -eq 1 -a 2 -eq 2 ]爲true 二者都爲真才爲真 |
-o |
或關係,在[]表達式中使用 | [ 1 -eq 1 -o 2 -eq 1 ]爲true 二者有一真則爲真 |
邏輯判斷符
判斷符 | 描述 | 實例 |
&& |
邏輯和,在[[]]表達式中 或判斷表達式是否爲真時使用 |
[[ 1 -eq 1 && 2 -eq 2 ]]爲 true [ 1 -eq 1 ] && echo 'true',若是&&前面的 表達式爲true則執行後面的 |
|| |
邏輯或,在[[]]表達式中 或判斷表達式是否爲真時使用 |
[[ 1 -eq 1 || 2 -eq 1 ]]爲 true [ 1 -eq 2 ] || echo 'true',若是||前面的 表達式爲false則執行後面的 |
注意:[] 不支持以上兩個邏輯判斷符,應該使用布爾運算符
整數運算
運算符 |
描述 |
+ |
加法 |
- |
減法 |
* |
乘法 |
/ |
除法 |
% |
取餘 |
運算表達式 |
實例 |
$(()) |
$((1+1)) |
$[] |
$[] |
其餘運算工具
命令 | 描述 |
實例 |
let | 賦值並運算,支持++、-- |
let VAR=(1+2)*3 ; echo $VAR x=10 ; y=5 let x++;echo $x 每執行一次 x 加 1 let y--;echo $y 每執行一次 y 減 1 let x+=2 每執行一次 x 加 2 let x-=2 每執行一次 x 減 2 |
expr | 乘法*須要加反斜槓轉義\* |
expr 1 \* 2 運算符兩邊必須有空格 expr \( 1 + 2 \) \* 2 使用雙括號時要轉義 |
bc | 計算器,支持浮點運算、平方等 |
bc 自己就是一個計算器,可直接輸入命令,進入解釋器 echo 1 + 2 |bc 將管道符前面標準輸出做爲 bc 的標準輸入 echo "1.2+2" |bc |
shell括號用法總結
() | 用途1:在運算中,先計算小括號裏面的內容 用途2:數組 用途3:匹配分組 |
(()) | 用途1:表達式,不支持-eq這類的運算符。不支持-a和-o,支持<=、>=、>這類比較符和&&、|| |
$() | 執行shell命令。與反引號等效 |
$(()) | 用途1:簡單算術運算 用途2:支持三目運算符 例:$(( 表達式?數字:數字 )) |
[] | 條件表達式,裏面不支持邏輯判斷符 |
[[]] | 條件表達式,裏邊不支持-a和-o,不支持<=、>=比較符,但支持-eq、<、>這類比較符 |
$[] | 簡單算術運算 |
{} | 對逗號(,)和點點(...)起做用,好比touch {1..3}或者{1,2,3} |
${} | 用途1:引用變量 用途2:字符串處理 |