字符串操作
變量賦值:
說明:變量值可以用單引號、雙引號、或者不加任何引號來賦值給變量
變量名="變量值"
變量名='變量值'
變量名=變量值
例如:str="hello world"
注意:=左右不能有空格,否則會報錯command not found
區別:
1.單引號的不能使用變量,$會被認為是個普通字符;字符串間可以有空格
2.雙引號可以使用變量;字符串間可以有空格
3.不加任何引號的只能賦值連續的字符串,中間不能有空格,否則會報命令錯誤
字符串連接
直接將兩個字符串寫在一起就可以,可以使用變量可以使用單雙引號。不能用空格或任何分隔符分開
例如:將str變量值連接一個空格然后再連接meitian
str=$str' '"meitian"
注意:如果字符串后連接的第一個字符是,:等標點符號或特殊字符(空格和字母,下划線之外的),可以直接連接不需要單雙引號。例如str=$str:metiian
字符串長度
expr length "$str"
注意:如果是想返回變量的長度,不能使用單引號
如果想將結果賦值到變量c中,可以使用反單引號來實現c=`expr length "$str"`
查找字符串位置
expr index $str chars(expr index 原字符串 要查找的字符串)
例如: expr index $str a
注意:
1.字符串的索引位置是從1開始的,區別於其他語言的開始位置0
2.如果有多個字符要進行匹配,會返回索引號最小的值(和要匹配的第一個字符沒關系)


字符串截斷
expr substr $str POS LENGTH(expr substr 原字符串 要截斷的起始位置 要截斷的長度)
例如:expr substr $str 2 3
字符串匹配
expr “$str” : REGEXP (expr 原字符串 : 正則表達式)
expr match “$str” REGEXP(expr match 原字符串 正則表達式)
例如:expr "$str" : ".*\([0-9]\{6\}\).*"或expr match "$str" ".*\([0-9]\{6\}\).*"
注意:
1.有變量的元字符串必須加雙引號"$str"
2.使用expr “$str” : REGEXP匹配時,冒號左右必須有空格
3.正則表達式必須用引號括起來
4.如果正則不加()就捕獲不到要匹配的值,只會返回匹配到的字符個數
5.expr中的正則表達式需要對(){}等字符使用\進行轉義


數學運算
運算符:
邏輯運算符 | 數值運算符 |
& 與 | + |
| 或 | - |
< 小於 | * |
> 大於 | / |
<= 小於等於 | % |
>= 大於等於 | () |
= 等於 | |
!= 不等於 |
數學運算公式:
expr expression
result=$[ expression ]
例如計算(1+2)*5用下面兩種方法:
expr \( 1 \+ 2 \) \* 5
result=$[(1+2)*5]
例如對變量a和變量進行大小比較,兩種方法如下:
expr $num1 \< $num2
result=$[$num1<$num2]
判斷兩個值是否相等,兩種方法如下:
expr $num1 = $num2
result=$[$num1==$num2]
做除法運算,查看結果,只取整了:
[root@bjdhj-118-117 ~]# echo $[10/4]
2
說明:
1.使用expr必須對運算符<使用\進行轉義,且數值與運算符中間需要空出空格
2.使用$[]做運算不需要對運算符進行轉義
3.expr判斷是否相同用=,在中括號[]中進行判斷需要用兩個等號==
4.shell中使用/做除法默認只會保留整數位
5.布爾值的結果,比如比較大小或是否相等。1為true,0為false
內建計算器bc(bash calculator)
bc能夠識別:
數字(整形和浮點型)
變量
注釋(#或/**/)
表達式
編程語句(如條件判斷:if then)
函數
usage: bc [options] [file ...]
-h --help print this usage and exit
-i --interactive force interactive mode
-l --mathlib use the predefined math routines
-q --quiet don't print initial banner
-s --standard non-standard bc constructs are errors
-w --warn warn about non-standard bc constructs
-h --help print this usage and exit
-i --interactive force interactive mode
-l --mathlib use the predefined math routines
-q --quiet don't print initial banner
-s --standard non-standard bc constructs are errors
-w --warn warn about non-standard bc constructs
-v --version print version information and exit
1.可以直接在shell中輸入bc進入bc工具,然后進行計算
2.bc工具中,scale決定了浮點數的小數位數,默認是0。quit退出bc

3.在腳本中使用bc
3.1使用管道符 var=`echo "options;expression" |bc`
例如計算(10/3)*3,保留4位小數
var=`echo "scale=4;b=10/3;b*3" |bc`

3.2使用內聯的輸入重定向
var=`bc<<EOF
opstions
statements
expressions
EOF
`
例如計算(5+5)/3*4,保留4位小數
result=`bc<<EOF
a=5
b=5
scale=4
(a+b)/3*4
EOF
`

說明:
1.bc能夠使用外層定義的變量
2.每次使用bc時scale都需要重新定義,scale不會記錄到下次使用bc