Bash-變數、基本運算子
變數
概念
變數的名字就是變數儲存值的地方。引用變數的值就叫做變數替換。
$variable
事實上只是${variable}
的簡寫形式。在某些上下文中$variable
可能會引起錯誤,這時候你就需要用${variable}
了。定義變數
定義變數時,變數名不加美元符號(
$
,PHP 語言中變數需要),如:myname="shiyanlou"
注意
變數名和等號之間不能有空格。同時,變數名的命名須遵循如下規則:
- 首個字元必須為字母(a-z,A-Z)。
- 中間不能有空格,可以使用下劃線(
_
)。- 不能使用標點符號。
- 不能使用 bash 裡的關鍵字(可用 help 命令檢視保留關鍵字)。
除了直接賦值,還可以用語句給變數賦值,如:
for file in `ls /etc`
使用變數
變數名前加美元符號,如:
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 表示沒有錯誤,其他任何值表明有錯誤。
基本運算子
算數運算子
- 原生 bash 不支援簡單的數學運算,但是可以通過其他命令來實現,例如
awk
和expr
,expr
最常用。expr
是一款表示式計算工具,使用它能完成表示式的求值操作。- 注意使用的反引號(esc 鍵下邊)
- 表示式和運算子之間要有空格
$a + $b
寫成$a+$b
不行- 條件表示式要放在方括號之間,並且要有空格
[ $a == $b ]
寫成[$a==$b]
不行- 乘號(
*
)前邊必須加反斜槓(\
)才能實現乘法運算關係運算符
關係運算符只支援數字,不支援字串,除非字串的值是數字。
前面說過if的條件表示式裡面的關係運算符
邏輯運算子
字串運算子
檔案測試運算子
實踐
浮點運算,比如實現求圓的面積和周長。
關於bc 常跟echo配合 安裝bc |
矩形的長 a=3,寬 b=2 建立一個 Area.sh,能夠計算此矩形的面積,輸出面積的值 建立一個 Cum.sh,能夠計算此矩形的周長,輸出周長的值 安裝bc |
《《《