1. 程式人生 > 實用技巧 >Bash-變數、基本運算子

Bash-變數、基本運算子

變數

概念

變數的名字就是變數儲存值的地方。引用變數的值就叫做變數替換。

$variable事實上只是${variable}的簡寫形式。在某些上下文中$variable可能會引起錯誤,這時候你就需要用${variable}了。

定義變數

定義變數時,變數名不加美元符號($,PHP 語言中變數需要),如:

myname="shiyanlou"

注意

變數名和等號之間不能有空格。同時,變數名的命名須遵循如下規則:

  • 首個字元必須為字母(a-z,A-Z)。
  • 中間不能有空格,可以使用下劃線(_)。
  • 不能使用標點符號。
  • 不能使用 bash 裡的關鍵字(可用 help 命令檢視保留關鍵字)。

除了直接賦值,還可以用語句給變數賦值,如:

for file in `ls /etc`

關於For in迴圈

使用變數

變數名前加美元符號,如:

myname="shiyanlou"
echo $myname
echo ${myname}
echo ${myname}Good
echo $mynameGood
myname="miao"
echo ${myname}

加花括號幫助直譯器識別變數的邊界,若不加,直譯器會把 mynameGood 當成一個變數(值為空)

推薦給所有變數加花括號

已定義的變數可以重新被定義

只讀變數

使用readonly命令可以將變數定義為只讀變數,只讀變數的值不能被改變。 下面的例子嘗試更改只讀變數,結果報錯:

特殊變數

區域性變數

這種變數只有在程式碼塊或者函式中才可見。

環境變數

這種變數將影響使用者介面和 shell 的行為。

在通常情況下,每個程序都有自己的“環境”,這個環境是由一組變數組成的,這些變數中存有程序可能需要引用的資訊。在這種情況下,shell 與一個一般的程序沒什麼區別。

位置引數

從命令列傳遞到指令碼的引數:$0$1$2$3...

$0就是指令碼檔案自身的名字,$1是第一個引數,$2是第二個引數,$3是第三個引數,然後是第四個。$9之後的位置引數就必須用大括號括起來了,比如,${10}${11}${12}

  • $#: 傳遞到指令碼的引數個數
  • $*: 以一個單字串顯示所有向指令碼傳遞的引數。與位置變數不同,此選項引數可超過 9 個
  • $$: 指令碼執行的當前程序 ID 號
  • $!: 後臺執行的最後一個程序的程序 ID 號
  • $@: 與$*相同,但是使用時加引號,並在引號中返回每個引數
  • $: 顯示 shell 使用的當前選項,與 set 命令功能相同
  • $?: 顯示最後命令的退出狀態。 0 表示沒有錯誤,其他任何值表明有錯誤。

關於if條件測試操作符

關於美元符號($)

基本運算子

算數運算子

  • 原生 bash 不支援簡單的數學運算,但是可以通過其他命令來實現,例如awkexprexpr最常用。
  • expr是一款表示式計算工具,使用它能完成表示式的求值操作。
  • 注意使用的反引號(esc 鍵下邊)
  • 表示式和運算子之間要有空格$a + $b寫成$a+$b不行
  • 條件表示式要放在方括號之間,並且要有空格[ $a == $b ]寫成[$a==$b]不行
  • 乘號(*前邊必須加反斜槓(\)才能實現乘法運算

關係運算符

關係運算符只支援數字,不支援字串,除非字串的值是數字。

前面說過if的條件表示式裡面的關係運算符

邏輯運算子

字串運算子



檔案測試運算子



實踐

浮點運算,比如實現求圓的面積和周長。

expr只能用於整數計算,可以使用bc或者awk進行浮點數運算。

關於bc 常跟echo配合

關於awk

安裝bc

矩形的長 a=3,寬 b=2

建立一個 Area.sh,能夠計算此矩形的面積,輸出面積的值

建立一個 Cum.sh,能夠計算此矩形的周長,輸出周長的值

安裝bc

《《《