Linux基礎學習——Shell基礎——Bash變數—數值運算與運算子和變數測試與內容替換
一、數值運算與運算子:
思考引入:
[[email protected] sh]# aa=11
[[email protected] sh]# bb=22
[[email protected] sh]# cc=$aa+$bb
[[email protected] sh]# echo $cc
11+22
如上:Linux中,shell中的變數型別,都是字串型別,在此表示加號連線了兩個字串,然後把該字串賦給了cc,於是如上
1、declare 宣告變數型別
[[email protected] ~]# declare 【+/-】【選項】變數名
選項:
-: 給變數設定型別屬性
+:取消變數的型別屬性
-i :將變數宣告為整數型(integer)
-x :將變數宣告為環境變數
-p :顯示指定變數的被宣告的型別
[[email protected] sh]# aa=11
[[email protected] sh]# bb=22
[[email protected] sh]# cc=$aa+$bb
[[email protected] sh]# echo $cc
11+22
[ [email protected] sh]# declare -p aa
declare -- aa="11"
[[email protected] sh]# export aa #習慣於用export 將某變數設定為環境變數,或者說是為其新增-x屬性
[[email protected] sh]# declare -p aa
declare -x aa="11"
[[email protected] sh]#
2、數值運算——
方法1:
[[email protected] sh]# aa=11
[[email protected] sh]# bb=22
#如上為給變數賦值方法
[[email protected] sh]# declare-i cc=$aa+$bb
-bash: declare-i: command not found
[[email protected] sh]# declare -i cc=$aa+$bb
[[email protected] sh]# echo $cc
33
方法2:expr 或let 數值運算工具
[[email protected]t sh]# aa=11
[[email protected] sh]# bb=22
[[email protected] sh]# dd=$(expr $aa+$bb)
[[email protected] sh]# echo $dd
11+22
[[email protected] sh]# aa=11
[[email protected] sh]# bb=22
[[email protected] sh]# dd=$(expr $aa + $bb)
[[email protected] sh]# echo $dd
33
特別注意:注意“ + ”號左右的空格!!!
方法3:“$((運算式))” 或 “$[運算式]”
[[email protected] sh]# aa=11
[[email protected] sh]# bb=22
[[email protected] sh]# ff=$(($aa+$bb))
[[email protected] sh]# echo $ff
33
[[email protected] sh]# gg=$[$aa+$bb]
[[email protected] sh]# echo gg
gg
[[email protected] sh]# echo $gg
33
[[email protected] sh]#
建議使用第三種,比較方便
3、運算子:
優先順序 | 運算子 | 說明 |
13 | -,+ | 單目負、單目正 |
12 | !,~ | 邏輯非、按位取反或補碼 |
11 | *,/,% | 乘、除、取模 |
10 | +,- | 加、減 |
9 | << ,>> | 按位左移、按位右移 |
8 | <= ,>= ,< ,> | 小於或等於、大於或等於、小於、大於 |
7 | == ,!= | 等於、不等於 |
6 | & | 按位與 |
5 | ^ | 按位異或 |
4 | | | 按位或 |
3 | && | 邏輯與 |
2 | || | 邏輯或 |
1 | =,+=,=,*=,/=,&=,^=,!=,<<=,>>= | 賦值、運算且賦值 |
[[email protected] sh]# aa=$(((11+3)*3/2))
#雖然乘和除的優先順序高於加,但是通過小括號可以調整運算優先順序
[[email protected] sh]# echo $aa
21
[[email protected] sh]# bb=$(( 14%3))
#14不能被3整除,餘數是2
[[email protected] sh]# echo $bb
2
[[email protected] sh]# cc=$(( 1 && 0))
#邏輯與運算只有想與的兩邊都是1時結果才是1,否則與的結果是0
[[email protected] sh]# echo $cc
0
注意原則:先寫$() 括起來,內部是什麼和正常的數學運算都是一致的
二、變數測試與內容替換
變數置換方式 | 變數y沒有設定 | 變數y為空值 | 變數y設定值 |
x=${y-新值} | x=新值 | x為空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x為空 | x=新值 | x=新值 |
x=${y:+新值} | x為空 | x為空 | x=新值 |
x=${y=新值} | x=新值 y=新值 |
x為空 y值不變 |
x=$y y值不變 |
x=${y:=新值} | x=新值 y=新值 |
x=新值 y=新值 |
x=$y y值不變 |
x=${y?新值} | 新值輸出到標準錯誤輸出(就是螢幕) | x為空 | x=$y |
x=${y:?新值} | 新值輸出到標準錯誤輸出(就是螢幕) | 新值輸出到標準錯誤輸出(就是螢幕) | x=$y |
注:上述內容不用背,要作為手冊放到易查的位置,用到時查一下就好,但首先要能看懂表格含義。
示例一、測試x=${y-新值}
[[email protected] ~]# unset y
# 刪除變數y
[[email protected] ~]# x=${ y-new}
#進行測試
[[email protected] ~]# echo $x
new
#因為變數y不存在,所以x=new
[[email protected] ~]# y=""
[[email protected] ~]# x=${ y-new}
[[email protected] ~]#echo $x
如上,測試第一行
[[email protected] sh]# unset y #表示不管是否有Y,用此句表示刪除y,保證確定不存在y變數
[[email protected] sh]# x=${y-new} #new 可以是其他任意的變數
[[email protected] sh]# echo $x #如果打印出來為new,則表示y變數不存在
new
[[email protected] sh]# y=""
[[email protected] sh]# x=${y-new}
[[email protected] sh]# echo $x
[[email protected] sh]#
[[email protected] sh]# y=old
[[email protected] sh]# x=${y-new}
[[email protected] sh]# echo $x
old
變數測試,就是用來判斷某個變數是否存在,是否為空,等,用於shell程式設計中,
用於計算機系統自己判斷某個變數的狀態
例項二:第二行第一個判斷
[[email protected] sh]# y=""
[[email protected] sh]# x=${y:-new}
[[email protected] sh]# echo $x
new
[[email protected] sh]#