shell腳本之變量與運算符

shell變量簡介shell

變量是任何一種編程語言都必不可少的組成部分,變量用來存放各類數據。腳本語言在定義變量時一般不須要指明類型,直接賦值就能夠,shell變量也循環這個規則。express

在bash shell中,每個變量的值都是字符串,不管你給變量賦值是有沒有使用引導,值都會以字符串的形式儲存。編程

這意味着,bash shell在默認狀況系不會區分變量類型,即便你將整數和小數賦值給變量,他們也會被視爲字符串,這一點和大部分的編程語言不通。數組

定義變量bash

shell支持如下三種定義變量的方式less

variable=value
variable='value'
variable="value"

variable是變量名,value是賦給變量的值。編程語言

注意:賦值號的周圍不能有空格,這與其它大部分編程語言不同函數

Shell 變量的命名規範和大部分編程語言都同樣:工具

  • 變量名由數字、字母、下劃線組成;
  • 必須以字母或者下劃線開頭;
  • 不能使用 Shell 裏的關鍵字(經過 help 命令能夠查看保留關鍵字)。

使用變量測試

使用一個定義過得變量,只要在變量名前加美圓符號$便可

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:字符串處理

相關文章
相關標籤/搜索