第一節(jié):變量的替換
| 變量 | 說明 |
|---|---|
| ${#變量} | 獲取變量值的長度 |
| ${變量#匹配規(guī)則} | 從頭開始匹配,最短刪除 |
| ${變量##匹配規(guī)則} | 從頭開始匹配,最長刪除 |
| ${變量%匹配規(guī)則} | 從尾開始匹配,最短刪除 |
| ${變量%%匹配規(guī)則} | 從尾開始匹配,最長刪除 |
| ${變量/舊字符串/新字符串} | 替換變量內的舊字符串為新字符串,只替換第一個 |
| ${變量//舊字符串/新字符串} | 替換變量內的舊字符串為新字符串,全部替換 |
| ${變量:匹配規(guī)則:匹配規(guī)則} | 索引及切片 |
第二節(jié):整數運算
1.expr (數值之間一定要有空格)#不能進行求方運算
[root@web /scripts/day02]# expr $a ^ $b
expr: syntax error
2.$(()) #不支持求方
[root@web /scripts/day02]# echo $(( $a ^ $b ))
30
3.$[]
[root@web /scripts/day02]# echo $[$a+$b]
30
4.let 計算次數 、自加 、自減
[root@web /scripts/day02]# let a++
[root@web /scripts/day02]# echo $a
11
[root@web /scripts/day02]# let a--
[root@web /scripts/day02]# echo $a
10
[root@web /scripts/day02]# let c=$a+$b
[root@web /scripts/day02]# echo $c
30
第三節(jié):小數運算
1.bc #相當與計算器
[root@web /scripts/day02]# yum install -y bc
[root@web /scripts/day02]# bc #進入交互式
[root@web /scripts/day02]# echo $a + $b | bc
30
2.awk計算
[root@web /scripts/day02]# awk 'BEGIN{print $a + $b }' #不支持外部變量
0
[root@web /scripts/day02]# awk 'BEGIN{print 10 + 20 }'
30
[root@web /scripts/day02]# awk 'BEGIN{print 10 / 20 }'
0.5
[root@web /scripts/day02]# awk 'BEGIN{print 10 ^ 20 }'
100000000000000000000
[root@web /scripts/day02]# awk 'BEGIN{print 10 / 3 }'
3.33333
[root@web /scripts/day02]# awk 'BEGIN{printf "%.2f\n",10 / 3 }' #保留小數點后2位
3.33
[root@web /scripts/day02]# awk 'BEGIN{printf "%.1f\n",10 / 3 }' #保留小數點后1位
3.3
#awk內部變量
[root@web /scripts/day02]# awk -va=1 -vb=2 'BEGIN{print a + b }'
3
3.python
[root@web /scripts/day02]# python
echo "print $a + $b " |python
30
[root@web /scripts/day02]# echo "print $a ^ $b " |python
30
[root@web /scripts/day02]# echo "print $a / $b " |python
0
[root@web /scripts/day02]# echo "print $a.0 / $b " |python
0.5
[root@web /scripts/day02]# echo "print $a.0 / 10 " |python
1.0
[root@web /scripts/day02]# echo "print $a.0 / 3 " |python
3.33333333333
[root@web /scripts/day02]# echo "print 10 / 3 " |python
3
[root@web /scripts/day02]# echo "print 10.0 / 3 " |python
3.33333333333
第四節(jié):數值比較
| 選項 | 說明 | 示例 |
|---|---|---|
| -eq | 等于則條件為真 | [ 1 -eq 10 ] |
| -ne | 不等于則條件為真 | [ 1 -ne 10 ] |
| -gt | 大于則條件為真 | [ 1 -gt 10 ] |
| -lt | 小于則條件為真 | [ 1 -lt 10 ] |
| -ge | 大于等于則條件為真 | [ 1 -ge 10 ] |
| -le | 小于等于則條件為真 | [ 1 -le 10 ] |
第五節(jié):字符串比對
1.字符串必須使用雙引號
[ "name" = "name" ]
[ "name" != "name" ]
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $USER
root
[root@web ~]# [ "$USER" = "root" ]
[root@web ~]# echo $?
0
[root@web ~]# [ "$USER" = "alex" ]
[root@web ~]# echo $?
1
[root@web ~]# [ "$USER" != "alex" ]
[root@web ~]# echo $?
0
2.-z判斷變量值是否為空,為空則返回值0
[root@web ~]# name=""
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
0
[root@web ~]# [ ! -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# name="alex"
[root@web ~]# [ -z $name ]
[root@web ~]# echo $?
1
[root@web ~]# [ -n $name ]
[root@web ~]# echo $?
0
-z 案例:
read -p "請輸入名字" name1
[ -z $name1 ] && echo "請輸入姓名否則不繼續(xù)執(zhí)行" && exit
read -p "請輸入年齡" age1
echo $name1 $age1
第六節(jié):正則比對
1.使用雙中括號里面才能進行正則比對 [[ ]]
[root@web01 scripts]# [ "$USER" = "root" ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ ^r ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ ! "$USER" =~ t$ ]]
[root@web01 scripts]# echo $?
1
案例:判讀傳參的參數是否為整數
方法1
[root@web01 scripts]# age=188
[root@web01 scripts]#
[root@web01 scripts]#
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# age=188q
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] && echo $?
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]] || echo $?
1
[root@web01 scripts]# age=18.8
[root@web01 scripts]# [[ "$age" =~ ^[0-9]+$ ]]
[root@web01 scripts]# echo $?
1
方法2
expr $1 + 0 >/dev/null 2>&1
[ $? -ne 0 ] && exit
第七節(jié):多整數比對
1.使用-a /and 并且的意思,兩邊的條件同時成立,返回值則為0
[ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# [ 10 -eq 10 -a 100 -ne 100 ]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [ 10 -eq 10 -a 100 -eq 100 ]
[root@web01 scripts]# echo $?
0
2.使用-o/or 或者的意思,兩邊的條件一個成立,返回值則為0
[root@web01 scripts]# [ 10 -eq 10 -o 100 -ne 100 ]
[root@web01 scripts]# echo $?
0
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# [[ 10 -eq 10 -a 100 -ne 100 ]]
-bash: 條件表達式中有語法錯誤
-bash: `-a' 附近有語法錯誤
[root@web01 scripts]# [[ 10 -eq 10 && 100 -ne 100 ]]
[root@web01 scripts]# echo $?
1
[root@web01 scripts]# [[ 10 -eq 10 || 100 -ne 100 ]]
[root@web01 scripts]# echo $?
0
第八節(jié):判斷文件或目錄
| 比較符 | 含義 | 示例 |
|---|---|---|
| -e | 如果文件或目錄存在則為真 | [ -e file ] |
| -s | 如果文件存在且至少有一個字符則為真 | [ -s file ] |
| -d | 如果文件存在且為目錄則為真 | [ -d file ] |
| -f | 如果文件存在且為普通文件則為真 | [ -f file ] |
| -r | 如果文件存在且可讀則為真 | [ -r file ] |
| -w | 如果文件存在且可寫則為真 | [ -w file ] |
| -x | 如果文件存在且可執(zhí)行則為真 | [ -x file ] |